Как я могу прочитать содержимое заголовка content-disposition?

ВРЕМЕННОЕ РЕШЕНИЕ: InputStream закрыт в Apache FileUpload API


Я хочу прочитать содержимое заголовка content-disposition, но request.getHeader ("content -disposition ") всегда возвращает значение null, а request.getHeader (" content-type ") возвращает только первую строку, как это multipart / form-data; Граница = 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--

Я хочу прочитать все заголовки Content-Disposition. Как?

Спасибо.


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 : Я работаю над этим. Как только напишу код, опубликую здесь!

6
задан Community 23 May 2017 в 12:16
поделиться