我在我的java项目中使用Apache Commons fileupload 1.4库。我有一个带有文件输入和一些隐藏字段的经典表单的html部分。
我在上传周围的文件时遇到问题
它适用于Chrome或Internet Explorer中的10mo文件。但是使用Firefox,我在提交表单后等待几分钟后会超时。
经过一些调试,我看到负责超时的代码是:
List<FileItem> items = (new ServletFileUpload(new DiskFileItemFactory())).parseRequest(request);
原因等待的部分是“解析请求”。
我尝试在IntelliJ中使用调试器调试请求的内容,但无法以原始格式复制此请求对象的整个内容值。
它在以下情况下工作:-Firefox:版本
没有文件大小限制,似乎取决于请求大小,因为解析请求部分花费了太多时间…
在两种情况下,我得到了带有Firefox扩展的HTTP请求。一个生成上传一个3mo的文件,但不起作用(请求文件很大,是上传文件大小的3倍):https://code.empreintesduweb.com/13561.html
一个生成上传200ko的文件,该文件有效(请求文件很小):https://code.empreintesduweb.com/13560.html
事实上,主要区别在于在Chrome或IE中,我在请求标头中没有上传文件的原始内容:
带有:obj流的部分....endstream endobj
仅与Firefox一起出现…
尝试使用setMaxInactiveInterval方法设置会话超时
request.getSession().setMaxInactiveInterval(1200);
参数 指定在 Servlet 容器使此会话失效之前的客户端请求之间的时间(以秒为单位)。间隔值为零或更小表示这些值永远不应超时。
在这里值得尝试的一些方法:
如果您提供更多信息,例如apache/java/servlet的版本,以及更多代码(尤其是Request
的定义),我们也可能会更好地帮助您
一些可能有帮助的资源:< br > XMLHttpRequest < br > Sending _ files _ using _ a _ FormData _ object < br >如何设置HTTP GET请求的头,并触发文件下载?
您可以尝试设置最大文件大小,可能文件大小超过了最大阈值。根据文档:
尝试以下方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Set factory constraints
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(yourMaxMemorySize);
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
List<FileItem> items = new ServletFileUpload(factory).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
String fieldName = item.getFieldName();
String fieldValue = item.getString();
// ... (do your job here)
} else {
// Process form file field (input type="file").
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());
InputStream fileContent = item.getInputStream();
// ... (do your job here)
}
}
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
// ...
}
在这里,我们为文件提供了一个临时位置,因为该文件很大。
我必须文件上传操作连续,第一个图像像gif|jpg|jpeg|png|svg和第二个psd|rar|zip|doc|word|txt|xlsx|pdf第一个工作正常,我可以上传所有图像,但第二个,我不能上传任何这些类型但当我尝试上传图像在第二段它的作品。
看来我有bug了。至少我认为这是一个错误。我编写了一种Soundboard并想添加与他人共享声音的功能。我要分享的代码如下: 我的问题是,这是可行的,但只适用于一些应用程序。例如,当我与WhatsApp或DropBox共享音频时,它似乎工作得很好,但当我尝试使用Google Drive或Bluetooth进行相同操作时,似乎出现了一些错误。请注意,音频的文件类型为WAV。我还确保我有权限写入外部存
我将nginx设置为一种静态文件服务器。出于某种原因,只有当我去123.123.123.123/或123.123.123.123时,它才会起作用。然而,当我去123.123.123.123/static/content/或123.123.123.123/static/content/another.mp3它返回404未找到。下面是位于中并链接到的配置文件。我真的很困惑为什么它不起作用。 如有任何指
问题内容: 我有一个800KB的JPG文件。我尝试上传到S3,并不断收到超时错误。你能弄清楚哪里出了问题吗?800KB很小,无法上传。 错误消息:在超时期限内未读取或写入到服务器的套接字连接。空闲连接将关闭。 HTTP状态码:400 AWS错误代码:RequestTimeout 问题答案: IOUtils.toByteArray是否有可能正在耗尽您的输入流,以便在进行服务调用时不再需要从中读取任何
文件关联是 Navicat 使用什么来打开 Navicat 的已保存文件。例如:.ndtfmysql 文件(MySQL 数据传输配置文件)会以数据传输窗口来打开,而 .nimpmysql 文件(MySQL 导入向导配置文件)会默认以导入向导来打开。
我使用firebase-admin和firebase-functions在Firebase存储中上传文件。 我在仓库里有这样的规则: