Distintos Amigos do Portal Java,
Estou tentando fazer um upload de arquivo em J2EE e tentando escrevÊ-lo no disco. Para tanto, estou usando uma ferramenta open source chamada Commons FileUpload (disponível em http://jakarta.apache.org/commons/fileupload/).
Ocorre, entretanto, que, ao rodar o código, o fluxo de execução é interrompido em try (por alguma razão que desconheço) e a execução continua em finally, diretamente. Ou seja, sem chamar nenhuma das exceções tratadas (ao menos é o que parece).
Agradeço antecipadamente a toda a comunidade!
MaLSan
P.S.: O doce é brincadeira! :)
Segue o código, o xabu acontece na linha 58 ( List items = upload.parseRequest(request);).
/*
* UploadServlet.java
*
* Created on September 15, 2006, 1:47 PM
*/
import java.io.*;
import java.util.Iterator;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*
* @author MaLSan
* @version
*/
public class UploadServlet extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
int contErros = 0;
try {
// Check that we have a file upload request
if (!ServletFileUpload.isMultipartContent(request)) {
out.print("perdi!");
}
else{
out.println("Firmou o pagode!");
}
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(65536);
factory.setRepository(new File("c:\\file.txt"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(4096);
// Parse the request
List items = upload.parseRequest(request);
Iterator i = items.iterator();
while (i.hasNext()) {
FileItem item = (FileItem) i.next();
if (!item.isFormField()) {
File uploadedFile = new File("c:\\file.txt");
item.write(uploadedFile);
}
}
}
catch (FileUploadException ex) {
++contErros;
out.println(ex.getMessage());
}
catch (Exception ex){
++contErros;
out.println(ex.getMessage());
}
finally{
out.println("Finalizado! " + contErros + " pitomba(s) encontrada(s)!");
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
Para uma apreciação mais completa, segue o formulário o qual estou utilizando para testar a classe.
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%--
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library... action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page for Test File Upload</title>
</head>
<body>
<h1>JSP Page for Test File Upload</h1>
<p>Get down to business!</p>
<form action="uploadservlet" enctype="multipart/form-data" method="POST">
<fieldset>
<label for="filetosend">Select a file: </label>
<input type="file" name="filetosend">
</fieldset>
<input type="submit" value="Send now!">
<%--
This example uses JSTL, uncomment the taglib directive above.
To test, display the page like this: index.jsp?sayHello=true&name=Murphy
--%>
<%--
<c:if test="${param.sayHello}">
<!-- Let's welcome the user ${param.name} -->
Hello ${param.name}!
</c:if>
--%>
</body>
</html>
[color="red"]*Editado: use BBCode nas suas mensagens no forum. Jair Elton[/color]