Начиная с версии 74 Firefox, файл, отправленный с использованием формы "multipart / form-data" с размером файла более 1,8 МБ, вызывает ошибку.
Примечание: файл, отправленный с использованием AJAX, работает нормально , Причиной проблемы является только многочастная форма.
HTML код:
<form name="formUpload" action="AdminImportInssAseg" method="POST"
enctype="multipart/form-data" onsubmit="return validate_form(this);">
<table class="centrado green">
<tr>
<td><input type="File" name="miadjuntoSolvenciaX" class="mdt">
</td>
</tr>
<tr>
<td align="center" colspan="2"><a href="#"
onClick="if(validate_form(formUpload)) formUpload.submit();"
title="Importar el archivo"><img alt='' border="0"
src="./images/add.gif" height="30"></a></td>
</tr>
</table>
</form>
Java код:
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
if (item.isFormField()) {
continue;
} else {
filename = item.getName();
contentType = item.getContentType();
String inputLine;
InputStream fis = item.openStream();
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(fis,"ISO-8859-1"));
while ((inputLine = in.readLine()) != null) {
try{
out.println("*"+inputLine+"*<br>");
}
catch (Exception e){
out.println("<p>Error: <b>"+e.getMessage() + "</b></p>");
}
}
fis.close();
}
}
Я вижу, что он читает файл, но происходит сбой в середине при использовании Firefox 74 +.
Под этим сообщением можно найти трассировку стека ошибок.
При использовании Firefox 73 или ниже все работает нормально.
При подключении напрямую к порту Tomcat (без использования разъема AJP) все работает нормально (в том числе с Firefox 74/75).
Код используется уже более десяти лет. Java кодирование, Apache и Tomcat не были изменены в последнее время.
Server version: Apache/2.4.43 (Linux/SUSE)
Я заметил, что "временный" сохраненный файл всегда обрезается в 188416 байт (в то время как загруженный файл на самом деле больше).
csimon@linux-069t:/tomcat/temp> l
total 376
drwxr-xr-x 2 csimon users 4096 may 1 10:53 ./
drwxr-xr-x 9 csimon users 4096 ago 29 2018 ../
-rw-r--r-- 1 csimon users 188416 may 1 10:45 EMP59_AF_GA_202005011.CSV
-rw-r--r-- 1 csimon users 188416 may 1 10:37 EMP59_AF_GA_20200501.CSV
Производственный пользователь сообщил о проблеме, но я мог воспроизвести ее локально.
Проблема возникает только при использовании Firefox 74 и 75 ( Я тестировал с Firefox 71 -> 75), поэтому должно быть связано с некоторыми изменениями в Firefox (по крайней мере, Linux и Windows версии). Я не смог найти объяснения, глядя на заметки о выпуске Firefox. Любой, кто получает представление о том, что может вызвать это, и как это можно исправить.
У меня уже было Firefox проблем, связанных с обновлением в прошлом, обычно исправлялось изменение некоторых значений в Firefox Конфиг через "about: config". Хитрость заключается в поиске нужного параметра для обновления ...
Журнал ошибок из журнала соединителя AJP при использовании Firefo 74 +:
[Sat May 02 18:27:55.801 2020] [15619:139986498496512] [info] init_jk::mod_jk.c (3591): mod_jk/1.2.46 initialized
[Sat May 02 18:27:55.805 2020] [15619:139986498496512] [info] init_jk::mod_jk.c (3591): mod_jk/1.2.46 initialized
[Sat May 02 18:28:02.669 2020] [15641:139986189342464] [info] ajp_process_callback::jk_ajp_common.c (2074): (ajp13) Writing to client aborted or client network problems
[Sat May 02 18:28:02.669 2020] [15641:139986189342464] [info] ajp_service::jk_ajp_common.c (2775): (ajp13) sending request to tomcat failed (unrecoverable), because of client write error (attempt=1)
[Sat May 02 18:28:02.670 2020] [15641:139986189342464] [info] jk_handler::mod_jk.c (2984): Aborting connection for worker=ajp13
[Sat May 02 18:28:15.289 2020] [15641:139986189342464] [info] ajp_read_into_msg_buff::jk_ajp_common.c (1550): (ajp13) receiving data from client failed. Connection aborted or network problems
[Sat May 02 18:28:15.289 2020] [15641:139986189342464] [info] ajp_process_callback::jk_ajp_common.c (2102): (ajp13) Reading from client aborted or client network problems
[Sat May 02 18:28:15.289 2020] [15641:139986189342464] [info] ajp_service::jk_ajp_common.c (2775): (ajp13) sending request to tomcat failed (unrecoverable), because of client read error (attempt=1)
[Sat May 02 18:28:15.310 2020] [15641:139986189342464] [info] jk_handler::mod_jk.c (2984): Aborting connection for worker=ajp13
Трассировка стека ошибок Tomcat при использовании Firefox 74+ :
java.io.IOException: Fallo en lectura de Conector
at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:313)
at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:364)
at org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:331)
at org.apache.coyote.ajp.AbstractAjpProcessor.refillReadBuffer(AbstractAjpProcessor.java:662)
at org.apache.coyote.ajp.AbstractAjpProcessor$SocketInputBuffer.doRead(AbstractAjpProcessor.java:1140)
at org.apache.coyote.Request.doRead(Request.java:422)
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:449)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315)
at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200)
at com.oreilly.servlet.multipart.BufferedServletInputStream.fill(BufferedServletInputStream.java:64)
at com.oreilly.servlet.multipart.BufferedServletInputStream.readLine(BufferedServletInputStream.java:108)
at com.oreilly.servlet.multipart.LimitedServletInputStream.readLine(LimitedServletInputStream.java:60)
at com.oreilly.servlet.multipart.PartInputStream.fill(PartInputStream.java:97)
at com.oreilly.servlet.multipart.PartInputStream.read(PartInputStream.java:195)
at com.oreilly.servlet.multipart.PartInputStream.read(PartInputStream.java:156)
at com.oreilly.servlet.multipart.FilePart.write(FilePart.java:208)
at com.oreilly.servlet.multipart.FilePart.writeTo(FilePart.java:167)
at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:271)
at servlet.presentacion.admin.AdminImportInssAseg.doPost(AdminImportInssAseg.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Заголовок Firefox версия 72:
Заголовок Firefox версия 75: