Question

Cela ne fonctionnera tout simplement pas. Le problème est que je ne sais pas assez pour savoir même ce qui est censé se passer. Je ne peux pas déboguer ce code. Je souhaite stocker le téléchargement dans un dossier temporaire " temp " puis de les déplacer vers des "applets". S'il vous plaît aider? On accède évidemment à la servlet, mais je ne trouve pas les fichiers téléchargés ... Merci d'avance.

Formulaire (créé à l'aide d'un scriptlet - je le mets ici si cela peut poser problème):

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

Qui appelle ce javascript:

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

Qui va à son tour à la servlet (code inclus dans son intégralité, car il peut y avoir quelques éléments importants cachés)

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

}

Était-ce utile?

La solution

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

En essayant d'accéder à ces fichiers sans chemin quelconque ni absolu, vous essayez d'écrire dans des fichiers (autres que des répertoires) nommés temp et applets sous le fichier courant. directeur de travail. Sur un serveur d'applications, le répertoire de travail actuel est généralement le dossier bin (dépend du serveur d'applications que vous utilisez, etc.).

Quelques suggestions:

  1. Utilisez un chemin absolu (de préférence stocké dans le fichier web.xml ou dans un fichier de propriétés) pour faire référence au répertoire dans lequel vous souhaitez enregistrer les fichiers.
  2. Vous devez spécifier le nom du fichier sur lequel vous voulez écrire, vous voulez probablement créer une sorte de nom aléatoire / unique par requête.
  3. Enregistrez vous-même quelques frappes de touche et utilisez une variable membre au lieu de toutes les références Logger.getLogger (UploadGameServlet.class.getName ()) !
  4. Ajoutez un peu de débogage, en particulier pour savoir où vous écrivez vos données - enregistrez le résultat de repositoryPath.getAbsolutePath () , par exemple.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top