HttpServletRequest#getParts() gibt eine leere Liste zurück

Ich habe Folgendes HTML-Formular:

<form enctype="multipart/form-data" method="post" action="/myservlet">
    <input type="file" name="mptest">
    <br />
    <input type="submit" value="upload">
 </form>

Und ich habe die folgenden servlet die ich erstellt basierend auf diese Antwort:

package com.functions;

import java.io.*;
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

//import com.functions.utility.DBConnector;
public class restore extends HttpServlet {

    private static final long serialVersionUID = 8097085789553030042L;

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("--------------------");
        System.out.println(" On restore.java ");
        System.out.println("--------------------");
        try {
            fetchDataFromDB(request, response);
        } catch (InterruptedException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void fetchDataFromDB(HttpServletRequest request,
            HttpServletResponse response) throws InterruptedException,
            IllegalStateException, ServletException {
        try {
            System.out.println("Test 1");
            for (Part part : request.getParts()) {
                String filename = getFilename(part);
                System.out.println("Test 2");
                if (filename == null) {
                    System.out.println("Test 3");
                    //Process regular form field (input
                    //type="text|radio|checkbox|etc", select, etc).
                    String fieldname = part.getName();
                    System.out.println(fieldname);
                    String fieldvalue = getValue(part);
                    System.out.println(fieldvalue);
                    //... (do your job here)
                } else if (!filename.isEmpty()) {
                    System.out.println("Test 4");
                    //Process form file field (input type="file").
                    String fieldname = part.getName();
                    System.out.println(fieldname);
                    filename = filename
                            .substring(filename.lastIndexOf('/') + 1)
                            .substring(filename.lastIndexOf('\\') + 1); //MSIE
                                                                        //fix.
                    InputStream filecontent = part.getInputStream();
                    System.out.println(filecontent);
                    String[] command = new String[] {
                            "C:/Program Files (x86)/MySQL/MySQL Server "
                            + "5.5/bin/mysql",
                            "--user=root", "--password=root", "dummy", "-e",
                            "source "+"C:/Users/John/Desktop/LMS/backup.sql" };
                    Process restore = Runtime.getRuntime().exec(command);
                    int check = restore.waitFor();
                    System.out.println(check);
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    private static String getFilename(Part part) {
        for (String cd : part.getHeader("content-disposition").split(";")) {
            if (cd.trim().startsWith("filename")) {
                return cd.substring(cd.indexOf('=') + 1).trim()
                        .replace("\"", "");
            }
        }
        return null;
    }

    private static String getValue(Part part) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                part.getInputStream(), "UTF-8"));
        StringBuilder value = new StringBuilder();
        char[] buffer = new char[1024];
        for (int length = 0; (length = reader.read(buffer)) > 0;) {
            value.append(buffer, 0, length);
        }
        return value.toString();
    }
}

Aber die for-Schleife request.getParts() ist nie eingetragen. Wie wird das verursacht und wie kann ich es lösen?

  • möglich, Duplikat der Wie zum hochladen von Dateien in JSP/Servlet?
  • Meine Antwort auf die Frage, die Sie im Zusammenhang erwähnt Sie unten einige links zu, wie die Verarbeitung der hochgeladenen Datei in JSP/Servlet.
  • Ich habe versucht den Vorschlag, den Sie gemacht in dem link.... aber es hat noch nicht einmal betreten der for-Schleife.....
InformationsquelleAutor John | 2011-09-16
Schreibe einen Kommentar