Frage

Das wird einfach nicht funktionieren. Das Problem ist, dass ich nicht genug wissen, um selbst wissen, was passieren sollte. Ich kann diesen Code nicht debuggen. Ich möchte Upload auf temporären Ordner „temp“ speichern und sie dann zu bewegen, um „Applets“. Bitte helfen? Das Servlet ist offensichtlich zugegriffen wird, aber ich kann nicht die hochgeladenen Dateien ... Vielen Dank im Voraus finden.

Form (die eine scriptlet erstellt wird - habe ich dies hier, wenn die Probleme verursachen können):

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

Welche dieser JavaScript-Aufrufe:

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

Was wiederum geht an das Servlet (Code in vollständig, da es einige wichtige Element versteckt sein kann)

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

}

War es hilfreich?

Lösung

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

Mit dem Versuch, diese Dateien ohne jede Art von führenden oder absolutem Pfad zuzugreifen, Sie versuchen, Dateien (keine Verzeichnisse) mit dem Namen temp und applets unter dem aktuellen Arbeitsverzeichnis zu schreiben. In einem Anwendungsserver, ist das aktuelle Arbeitsverzeichnis in der Regel die bin Ordner (hängt davon ab, welche App-Server Sie verwenden, etc).

Einige Vorschläge:

  1. Verwenden Sie einen absoluten Pfad (vorzugsweise gespeichert in web.xml oder eine Eigenschaftendatei) in das Verzeichnis verweisen Sie Dateien speichern möchten.
  2. Sie haben den Namen der Datei angeben, die Sie schreiben möchten, haben Sie wahrscheinlich eine Art von zufälligen / eindeutigen Namen pro Anfrage erstellt werden soll.
  3. Sparen Sie sich einige Tastenanschläge und eine Membervariable anstelle aller Logger.getLogger(UploadGameServlet.class.getName()) Referenzen!
  4. Fügen Sie einige Debug, vor allem, um zu sehen, wo Sie Ihre Daten zu schreiben -. Log das Ergebnis repositoryPath.getAbsolutePath(), zum Beispiel
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top