TẠM SOLVED:InputStream closed in Apache FileUpload APILàm cách nào để đọc nội dung của tiêu đề bố cục nội dung?
Tôi muốn đọc nội dung của tiêu đề Content-Disposition nhưng request.getHeader ("content-disposition")
luôn trả về null và request.getHeader ("content-type")
chỉ trả lại dòng đầu tiên, như multipart/form-data; boundary=AaB03x
này.
Giả sử tôi nhận tiêu đề sau đây:
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
Tôi muốn đọc tất cả các tiêu đề nội dung bố trí. Làm sao?
Cảm ơn.
EDIT1: Những gì tôi thực sự muốn giải quyết vấn đề là khi khách hàng gửi một tập tin mà vượt quá kích thước tối đa vì khi bạn gọi request.getPart ("cái gì đó") nó không có vấn đề gì phần tên bạn chuyển cho nó bởi vì nó sẽ luôn ném một IllegalStateException ngay cả khi yêu cầu không chứa tên tham số này.
Ví dụ:
Part part = request.getPart ("param");
String value = getValue (part);
if (value.equals ("1")){
doSomethingWithFile1 (request.getPart ("file1"))
}else if (value.equals (2)){
doSomethingWithFile2 (request.getPart ("file2"))
}
private String getValue (Part part) throws IOException{
if (part == null) return null;
BufferedReader in = null;
try{
in = new BufferedReader (new InputStreamReader (part.getInputStream(), request.getCharacterEncoding()));
}catch (UnsupportedEncodingException e){}
StringBuilder value = new StringBuilder();
char[] buffer = new char[1024];
for (int bytesRead; (bytesRead = in.read (buffer)) != -1;) {
value.append (buffer, 0, bytesRead);
}
return value.toString();
}
tôi không thể làm điều này vì nếu khách hàng gửi một tập tin mà vượt quá kích thước tối đa cuộc gọi đầu tiên để getPart sẽ ném ngoại lệ (xem getPart() Javadoc), vì vậy tôi không thể biết tôi đã nhận được tập tin nào.
Đó là lý do tại sao tôi muốn đọc các tiêu đề sắp xếp nội dung. Tôi muốn đọc tham số "param" để biết tệp nào đã ném ngoại lệ.
EDIT2: Vâng, với các API mà xuất bản 3.0 đặc điểm kỹ thuật Servlet bạn không thể kiểm soát trường hợp trước bởi vì nếu một file ném một ngoại lệ bạn không thể đọc được tên trường tập tin. Đây là một phần tiêu cực của việc sử dụng một wrapper vì rất nhiều chức năng biến mất ... Ngoài ra với FileUpload bạn có thể tự động thiết lập các chú thích MultipartConfig.
Nếu tệp vượt quá kích thước tệp tối đa, api sẽ ném ngoại lệ FileSizeLimitExceededException. Ngoại lệ cung cấp 2 phương thức để lấy tên trường và tên tệp.
Nhưng !! vấn đề của tôi vẫn chưa được giải quyết vì Tôi muốn đọc giá trị của một tham số khác được gửi cùng với tệp trong cùng một biểu mẫu. (giá trị của "param" trong ví dụ trước)
EDIT3: Tôi đang làm việc về vấn đề này. Ngay sau khi tôi viết mã, tôi sẽ xuất bản nó ở đây!
Không phải là một trùng lặp. –