ВРЕМЯ РЕШЕНО: InputStream закрыт в Apache FileUpload API
Я хочу прочитать содержимое заголовка расположения содержимого, но request.getHeader ("content-disposition")
всегдаreturn null и request.getHeader ("content-type")
возвращает только первую строку, например multipart/form-data; boundary=AaB03x
.
Предположим, я получаю следующий заголовок:
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--
Я хочу прочитать все заголовки размещения содержимого,Как?
Спасибо.
EDIT1 : что я действительно хочу решить, так это проблему, когда клиент отправляет файл, размер которого превышает максимальный, потому что, когда выВызовите request.getPart («что-то»), не имеет значения, какое имя части вы передаете ему, потому что оно всегда вызовет IllegalStateException, даже если запрос не содержит этого имени параметра.
Пример:
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 ();
}
Я не могу этого сделать, потому что, если клиент отправляет файл, размер которого превышает максимальный, первый вызов getPart вызовет исключение (см. getPart () Javadoc ), поэтому я могуНе знаю, какой файл я получил.
Вот почему я хочу прочитать заголовки размещения контента.Я хочу прочитать параметр "param", чтобы узнать, какой файл вызвал исключение.
EDIT2 : Ну, с API, который публикует спецификацию Servlet 3.0, вы не можетеуправляйте предыдущим случаем, потому что, если файл выдает исключение, вы не можете прочитать имя поля файла.Это отрицательная часть использования оболочки, поскольку многие функции исчезают ... Также с помощью FileUpload вы можете динамически устанавливать аннотацию MultipartConfig.
Если размер файла превышает максимальный размер файла, который API выдает FileSizeLimitExceededException исключение.Исключение предоставляет 2 метода для получения имени поля и имени файла.
Но !!Моя проблема до сих пор не решена, потому что Я хочу прочитать значение другого параметра, отправленного вместе с файлом в той же форме. (значение «param» в предыдущем примере)
EDIT3 : я работаю над этим.Как только я напишу код, я опубликую его здесь!