Pregunta

Esto simplemente no funcionará. El problema es que no sé lo suficiente como para saber qué 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 usando un scriptlet; pongo esto aquí si eso puede 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>");
 %>

Que llama a este 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 oculto)

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();
    }
} 

}

¿Fue útil?

Solución

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 directorios) llamados temp y applets bajo el actual directorio de trabajo. 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:

  1. 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.
  2. Debe especificar el nombre del archivo en el que desea escribir, probablemente desee crear algún tipo de nombre aleatorio / único por solicitud.
  3. Ahórrese algunas teclas y use una variable miembro en lugar de todas las referencias Logger.getLogger (UploadGameServlet.class.getName ()) !
  4. Agregue un poco de depuración, especialmente para ver dónde está escribiendo sus datos: registre el resultado de repositoryPath.getAbsolutePath () , por ejemplo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top