Surgiu um problema:
Quando faço o upload usando o enctype=“multipart/form-data” não consigo recuperar nenhum parametro via post na minha servlet.
Se retirar o enctype=“multipart/form-data” consigo recuperar os parametros via post na minha servlet mas não consigo fazer o upload.
Já dei uma pesquisada sobre o assunto, porem não consegui resolver meu problema. Alguem ja passou por isso?
teste2.jsp
[code]Form para upload de arquivo
Arquivo
Upload:
Selecione um arquivo para upload:
[/code]
servlet
[code]protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String file = request.getParameter("file");
request.setAttribute("id", id);
request.setAttribute("file", file);
//despachando a request para a página de destino
RequestDispatcher dispatcher = request.getRequestDispatcher("/uploadFile.jsp");
dispatcher.forward(request, response);
}[/code]
tenta assim
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
String id = (String)mrequest.getParameter("id");
Se não me engano o enctype=“multipart/form-data”, é específico para upload…
se você usar ele, não sei se vai conseguir mandar outras informações pelo mesmo form.
build_successful , ele não chega nem a enviar os parametros quanto o metodo é post, somente se retirar o multipart/form-data.
Mas via Get funfa belza, to achando que isso é um bug.
Tive este mesmo problema, terá que usar uma biblioteca para fazer upload e depois utilizá-la para recuperar os valores, recomendo a Apache Commons-FileUpload
você importou a biblioteca commons-file-upload.jar no seu projeto? se você está utilizando o tomcat, faça o teste colocando também esta biblioteca na pasta lib (no tomcat).
Já realizei todos estes passos, estou utilizando a biblioteca jackarta, utilizo o apache, já coloquei o jar na pasta lib tbm.
A questão não é o upload, pois este funciona blz, e os paramentros dele eu consigo pegar como podem ver no codigo abaixo. A questão é que preciso passar
algumas informações do formulário principal para servlet e envialas para o uploadFile.jsp
[code]<%@ page import=“com.mysql.jdbc.Driver." %>
<%@ page import="java.sql.” %>
<%@ page import=“conecta." %>
<%@ page import="javax.servlet.”%>
<%@ page import=“java.util."%>
<%@ page import="java.io.”%>
<%@ page import=“javax.servlet.http."%>
<%@ page import="org.apache.commons.fileupload.”%>
<%@ page import=“org.apache.commons.fileupload.disk."%>
<%@ page import="org.apache.commons.fileupload.servlet.”%>
<%@ page import=“org.apache.commons.io.output.*”%>
<%
System.out.println("parametros: " + request.getParameter(“id”) + " " + request.getParameter(“file”));
File file;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter(“file-upload”); // pega o parametro do xml(no caso o caminho onde será salvo os arquivos)
// Verifique se o tipo de conteúdo
String contentType = request.getContentType();
// System.out.println("contentType " + contentType.indexOf(“multipart/form-data”));
// System.out.println("contentType " + contentType);
if ((contentType.indexOf(“multipart/form-data”) >= 0)) {
System.out.println(“entrou no loop”);
DiskFileItemFactory factory = new DiskFileItemFactory();
// Tamanho máximo que será armazenado na memória
factory.setSizeThreshold(maxMemSize);
// Local para guardar dados que é maior do que maxMemSize.
factory.setRepository(new File("C:\temp"));
// Criar um novo arquivo do manipulador de upload
ServletFileUpload upload = new ServletFileUpload(factory);
// Tamanho máximo de arquivo a ser carregado.
upload.setSizeMax( maxFileSize );
try{
// Analisar a solicitação para obter itens de arquivo.
List fileItems = upload.parseRequest(request);
// Processar os itens de arquivos enviados
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP Arquivo upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Pega os parâmetros de arquivos enviados
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Escreve o arquivo
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath );
System.out.println("file: " + file);
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
}
}else{
out.println("");
out.println("");
out.println(“Arquivo Servlet upload”);
out.println("");
out.println("");
out.println(“
Não foi feito upload do arquivo
”);
out.println("");
out.println("");
}
%>[/code]
Para não deixar o post sem resposta venho finaliza-lo, para alguem mais que tiver o mesmo problema segue a solução:
if(fi.isFormField()){ // Apartir deste ponto recupera-se os parametros do formulário
String idd = fi.getString();
System.out.println("retorno incerto: " + idd);
}
Basta apenas acrescentar esta parte no código (no caso deste exemplo o uploadFile.jsp), com ela conseguimos todos os parametros enviados.