@MultiPartConfig thực sự chỉ là giao diện đánh dấu cho vùng chứa. Khi servlet được khởi tạo, các giá trị chú thích được cung cấp được ánh xạ tới nó với một đối tượng proxy. Khi yêu cầu đến là dữ liệu nhiều phần/biểu mẫu, các phần của video tải lên được ánh xạ tới yêu cầu và vùng chứa thực hiện công việc cần thiết dựa trên các giá trị từ chú thích và các phần theo yêu cầu. Không có cách nào để bạn có thể ngăn chặn quá trình này vì nó xảy ra bên trong ruột của container. Tuy nhiên, có một thay thế. Nó yêu cầu thực hiện một hoạt động hệ thống tập tin lần thứ hai. Vì bạn có tất cả các phần, bạn có thể tái tạo lại tệp và "tải lên lại" lên vị trí bạn chọn. Nó có thể trông giống như phương pháp bên dưới. Hãy nhớ mặc dù tôi đã thử nghiệm này một cách nhanh chóng trong một servlet của riêng tôi để chứng minh khái niệm nó là rõ ràng là không hoàn thành mã:
@Override
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
httpServletResponse.setContentType("text/html");
PrintWriter printWriter = httpServletResponse.getWriter();
InputStream inputStream;
FileOutputStream fileOutputStream;
for (Part part : httpServletRequest.getParts()) {
inputStream = httpServletRequest.getPart(part.getName()).getInputStream();
int i = inputStream.available();
byte[] b = new byte[i];
inputStream.read(b);
String fileName = "";
for (String temp : part.getHeader("content-disposition").split(";")) {
if (temp.trim().startsWith("filename")) {
fileName = temp.substring(temp.indexOf('=') + 1).trim().replace("\"", "");
}
}
String uploadDir = "/temp";
fileOutputStream = new FileOutputStream(uploadDir + "/" + fileName);
fileOutputStream.write(b);
inputStream.close();
fileOutputStream.close();
printWriter.write("Uploaded file " + uploadDir + "/" + fileName + ".");
}
}
Nguồn
2013-10-13 02:02:18
Nếu bạn đang sử dụng @MultiPartConfig và cần một vị trí file runtime sau đó bạn không có tùy chọn nào khác ngoài "tải lên lại" các bộ phận. –