Domanda

Questo non funzionerà. Il problema è che non ne so abbastanza per sapere nemmeno cosa dovrebbe succedere. Non riesco a eseguire il debug di questo codice. Vorrei archiviare il caricamento nella cartella temporanea " temp " e quindi per spostarli in " applet " ;. Per favore aiuto? È ovviamente possibile accedere al servlet, ma non riesco a trovare i file caricati ... Grazie in anticipo.

Modulo (che viene creato usando uno scriptlet - lo metto qui se ciò potrebbe causare problemi):

<%
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>");
 %>

Che chiama questo javascript:

function submitToServlet2(newAction)
    {
       document.uploadForm.action = newAction;
    }

Che a sua volta va al servlet (codice incluso per intero, poiché potrebbe esserci qualche elemento importante nascosto)

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

}

È stato utile?

Soluzione

File repositoryPath = new File("\\temp");
File uploadedFile = new File("\\applets");

Tentando di accedere a questi file senza alcun tipo di percorso iniziale o assoluto, si sta tentando di scrivere su file (non directory) denominati temp e applet sotto l'attuale directory di lavoro. In un server di app, la directory di lavoro corrente è in genere la cartella bin (dipende dal server di app utilizzato, ecc.)

Alcuni suggerimenti:

  1. Utilizzare un percorso assoluto (preferibilmente memorizzato in web.xml o un file delle proprietà) per fare riferimento alla directory in cui si desidera salvare i file.
  2. Devi specificare il nome del file in cui vuoi scrivere, probabilmente vuoi creare una sorta di nome casuale / unico per richiesta.
  3. Salva alcune sequenze di tasti e usa una variabile membro anziché tutti i riferimenti Logger.getLogger (UploadGameServlet.class.getName ()) !
  4. Aggiungi un po 'di debug, soprattutto per vedere dove stai scrivendo i tuoi dati - registra il risultato di repositoryPath.getAbsolutePath () , per esempio.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top