galerinha estou precisando fazer um upload em um arquivo mas estou tenho dificudade em usar o File Upload do apache, por um acaso tem como alguem me ajudar, achei esse código na net mas quando ele faz a verificação no if (ServletFileUpload.isMultipartContent(request)) ele retorna false e não faz nada, alguem sabe me dizer o que eu preciso fazer para que esse código funcione
ou se alguem tiver um código mais simples para me ajudar ficarei grato…
out.println(ServletFileUpload.isMultipartContent(request));
if (ServletFileUpload.isMultipartContent(request)){
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);
String optionalFileName = "";
FileItem fileItem = null;
Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
if (fileItemTemp.getFieldName().equals("filename"))
optionalFileName = fileItemTemp.getString();
}
else
fileItem = fileItemTemp;
}
if (fileItem!=null){
String fileName = fileItem.getName();
/* Save the uploaded file if its size is greater than 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;
String dirName = "/file_uploads/";
File saveTo = new File(dirName + fileName);
try {
fileItem.write(saveTo);
}
catch (Exception e){
}
}
}
}
velhinho eu sei que isso é básico mas velho não entendi o pq disso
o meu formulário e o meu Servlet era get ai mudei para post so que agora da erro
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
cadastraimagem.doPost(cadastraimagem.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.17
puxa vida pq da isso, sendo que só mudei isso e pelo que eu sei isso só muda o method, o jeito de mandar os dados.
[quote=Gu]galerinha estou precisando fazer um upload em um arquivo mas estou tenho dificudade em usar o File Upload do apache, por um acaso tem como alguem me ajudar, achei esse código na net mas quando ele faz a verificação no if (ServletFileUpload.isMultipartContent(request)) ele retorna false e não faz nada, alguem sabe me dizer o que eu preciso fazer para que esse código funcione
ou se alguem tiver um código mais simples para me ajudar ficarei grato…
[code]
out.println(ServletFileUpload.isMultipartContent(request));
if (ServletFileUpload.isMultipartContent(request)){
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);
String optionalFileName = "";
FileItem fileItem = null;
Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
if (fileItemTemp.getFieldName().equals("filename"))
optionalFileName = fileItemTemp.getString();
}
else
fileItem = fileItemTemp;
}
if (fileItem!=null){
String fileName = fileItem.getName();
/* Save the uploaded file if its size is greater than 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;
String dirName = "/file_uploads/";
File saveTo = new File(dirName + fileName);
try {
fileItem.write(saveTo);
}
catch (Exception e){
}
}
}
}
[/code][/quote]
Galerinha aqui nesse ponto do código
if (fileItemTemp.getFieldName().equals("filename"))
filename entre asterisdtico é o nome do campo do meu formulário em html?
Galerinha consegui fazer com que o File Upload funcione. Porém não estou conseguindo chamar um outro campo do formulário que está no meu jsp em forma de HTML, preciso do valor desse campo para iserir a imagem no banco, por um acaso alguem sabe o que eu preciso fazer para que eu consiga colocar um outro valor no meu servlet que executa o File Upload?
A forma que eu estava tentando chamar o campo do formulario era através do request.getParameter, mas ele da null…
galerinha estou com um probleminha para chamar um segundo campo com file upload. Vou postar o codigo aqui e se alguem souber e quiser me ajudar ficarei grato
da forma que fiz so consigo pegar p valor do campoid, o valor do campoimagem da null;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FilenameUtils;
import java.util.List;
import java.io.File;
import java.lang.Exception;
public class cadastraimagem extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int optionalFileNameid = 0;
HttpSession sessao = null;
String fileName = null;
response.setContentType("text/html;");
PrintWriter out = response.getWriter();
Connection con;
Statement stm;
ResultSet rs;
try{
if (ServletFileUpload.isMultipartContent(request)){
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);
String optionalFileName = "";
FileItem fileItem = null;
Iterator it = fileItemsList.iterator();
do{
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
if (fileItemTemp.getFieldName().equals("campoid"))
optionalFileNameid = Integer.parseInt(fileItemTemp.getString());
if (fileItemTemp.getFieldName().equals("campoimagem"))
optionalFileName = fileItemTemp.getString();
}
}while (it.hasNext());
if (fileItem!=null){
fileName = fileItem.getName();
/* Save the uploaded file if its size is greater than 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;
fileName = fileName.substring(fileName.lastIndexOf("'\'")+1);
String dirName = "G:/java_www/gestaosindicato/web/imagem/";
File saveTo = new File(dirName + fileName);
try {
fileItem.write(saveTo);
}
catch (Exception e){
}
}
}
}
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:porta;databaseName=nomebanco;","usuario","senha");
stm = con.createStatement();
String sql = "UPDATE RESCISAO SET IMGRESCISAO= '"+fileName+"' WHERE CODIGO='"+optionalFileNameid+"'";
out.println("sql "+sql);
stm.executeUpdate(sql);
// out.println("<script>window.alert('Imagem Inserida com Sucesso')</script>");
// out.println("<script>document.location.href='cadastrarescisao.jsp'</script>");
}catch(Exception e){
out.println("Falha na conexão! erro: "+e.getMessage());
}
}
}
Então Gustavo,
dentro do seu while você faz uma condição se o campo é um formField, o que acontece é que os campos que são inputs do tipo “file”
não vem como form field, você deveria capturar o “campoimagem” em um else desse seu if.
Para exemplificar melhor (por que o texto acima está horrivel) você poderia fazer assim.
while (it.hasNext()){
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
if (fileItemTemp.getFieldName().equals("campoid"))
optionalFileNameid = Integer.parseInt(fileItemTemp.getString());
if (fileItemTemp.getFieldName().equals("campoimagem"))
optionalFileName = fileItemTemp.getString();
}else{
optionalFileName = fileItemTemp.getName();
/* você pode aproveitar e já fazer o processo de gravar o arquivo no servidor aqui,
por que você vai precisar do ponteiro atual para o FileItem
*/
}
}
Outra coisa usei uma while ao inves de um do while, por que se sua coleção vier vazia pode dar uma Exception desnecessaria