Я использую MultipartConfig для обработки загрузки файла с помощью сервлета и отправки сообщения об ошибке, если файл слишком велик:
private void doUpload(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
Part filePart;
try {
filePart = request.getPart("file");
} catch (IllegalStateException e) {
System.out.println("File To Large");
response.setStatus(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
PrintWriter writer = response.getWriter();
writer.println("failure:filetobig");
writer.flush();
writer.close();
return;
}
... (file handling) ...
}
Если я использую сервлет с Jquery-File-Upload (на основе Ajax) иразмер файла превышает maxFileSize, Edge возвращает правильное сообщение об ошибке с кодом состояния 413 и состоянием готовности 4. Если я делаю то же самое с Firefox или Chrome, я получаю код состояния 0, состояние готовности0 и вкладка сети в dev-tools показывает, что ответ не получен. image
В Firefox битрейт переключается с отрицательного на положительный, и через некоторое время Chrome возвращает NaN.Независимо от того, какой браузер я использую, System.out.println("File To Large");
выполняется.Если я выполняю запрос на загрузку с помощью cURL, возвращается правильное сообщение об ошибке.
Мой MultipartConfig для проверки этого:
@MultipartConfig(maxFileSize = 1024 * 1024 * 30, // 30 MB
maxRequestSize = 1024 * 1024 * 1000 // 1000 MB
)