Tôi có dạng HTML sau:HttpServletRequest # getParts() trả về một danh sách trống
<form enctype="multipart/form-data" method="post" action="/myservlet">
<input type="file" name="mptest">
<br />
<input type="submit" value="upload">
</form>
Và tôi có servlet sau mà tôi tạo ra dựa trên this answer:
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();
}
}
Nhưng vòng lặp for trên request.getParts()
không bao giờ được nhập. Làm thế nào là điều này gây ra và làm thế nào tôi có thể giải quyết nó?
thể trùng lặp của [Làm thế nào để tải lên tập tin trong JSP/Servlet?] (Http://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824) – BalusC
Câu trả lời của tôi cho câu hỏi mà bạn đã liên kết đề cập ở dưới cùng một số liên kết về cách xử lý tệp được tải lên trong JSP/Servlet. – BalusC
Tôi đã thử đề xuất bạn đã tạo trong liên kết .... nhưng nó thậm chí không nhập vòng lặp ..... – John