java - servlet - Usando Apache commons FileUpload
request file servlet (1)
File repositoryPath = new File("//temp");
File uploadedFile = new File("//applets");
Al intentar acceder a estos archivos sin ningún tipo de ruta principal o absoluta, está intentando escribir en archivos (no en directorios) denominados temp
y applets
en el directorio de trabajo actual. En un servidor de aplicaciones, el directorio de trabajo actual suele ser la carpeta bin
(depende del servidor de aplicaciones que utilice, etc.).
Algunas sugerencias:
- Use una ruta absoluta (preferiblemente almacenada en web.xml o un archivo de propiedades) para referirse al directorio en el que desea guardar los archivos.
- Debe especificar el nombre del archivo en el que desea escribir, probablemente desee crear algún tipo de nombre aleatorio / único por solicitud.
- ¡Ahórrese algunas teclas y use una variable miembro en lugar de todas las
Logger.getLogger(UploadGameServlet.class.getName())
! - Agregue un poco de depuración, especialmente para ver dónde está escribiendo sus datos: registre el resultado de
repositoryPath.getAbsolutePath()
, por ejemplo.
Esto simplemente no funcionará. El problema es que no sé lo suficiente como para saber lo que se supone que sucederá. No puedo depurar este código. Me gustaría almacenar la carga en la carpeta temporal "temp" y luego moverlos a "applets". ¿Por favor ayuda? Obviamente, se está accediendo al servlet, pero no puedo encontrar los archivos cargados ... Gracias de antemano.
Formulario (que se crea utilizando un scriptlet; pongo esto aquí si eso pudiera causar problemas):
<%
out.write("<p>Upload a new game:</p>");
out.write("<form name=/"uploadForm/" action=/"game.jsp/" "
+ "method=/"POST/" enctype=/"multipart/form-data/">"
+ "<input type=/"file/" name=/"uploadSelect/" value=/"/" width=/"20/" />"
+ "<br><input type=/"submit/" value=/"Submit/" name=/"uploadSubmitButton/" "
+ "onclick = /"submitToServlet2(''UploadGameServlet'');/">"
+ "</form>");
%>
Lo que llama a esto javascript:
function submitToServlet2(newAction)
{
document.uploadForm.action = newAction;
}
Que a su vez va al servlet (código incluido en su totalidad, ya que puede haber algún elemento importante escondido)
package org.project;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
// import servlet stuff
import org.apache.commons.fileupload.*;
public class UploadGameServlet 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 ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
if (ServletFileUpload.isMultipartContent(request))
{
try
{
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List items = upload.parseRequest(request); /* FileItem */
File repositoryPath = new File("//temp");
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setRepository(repositoryPath);
Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
File uploadedFile = new File("//applets");
item.write(uploadedFile);
}
}
catch (FileUploadException ex)
{
Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (Exception ex)
{
Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet UploadGameServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet UploadGameServlet at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}