Apache commons 文件上传替代方案

Posted

技术标签:

【中文标题】Apache commons 文件上传替代方案【英文标题】:Apache commons file upload alternatives 【发布时间】:2011-03-26 06:16:03 【问题描述】:

我想知道 Java 文件上传 API 的 *** 用户过去使用过什么并推荐使用?快速的 Google 搜索似乎表明最常用的 API 是 Apache Commons File Upload(当前为 1.2.1),但是,我们在使用这个库时遇到了一些问题,我们无法处理更大的文件解决。

有没有人找到他们推荐的可靠文件上传库(Apache Commons 除外)?

编辑:Streaming API 不是选项,因为它使用导致我们问题的相同底层类。

EDIT2:我们最初的问题似乎是负载平衡的某种问题。我们的克隆实例使用 Apache/AJP1.3,实时实例使用 Zeus XTM。通过使用服务器 IP 而不是主机名绕过负载平衡器似乎会导致问题消失。

EDIT3:这原来是客户端防火墙的问题。当他们说他们肯定知道这不是防火墙问题时,他们似乎……呃……并不完全真实。

【问题讨论】:

什么样的问题?内存相关? 导致问题的文件超过 7MB。我们测试过的最大容量是 600MB。发生的情况是浏览器中的上传失败,我们最终在日志中得到一个堆栈跟踪,指出流意外结束。在 Commons File Upload JIRA 实例 (issues.apache.org/jira/browse/FILEUPLOAD-143) 上有一个与此相关的未解决的错误。最后一位评论者是我自己。这不是 Flash 问题,这发生在浏览器中,但仅适用于 Windows XP 和 Vista 客户端。我们完全感到困惑。 我就这个问题提出了另一个 *** 问题 (***.com/questions/3263809/…),但似乎没有人知道答案。 MultipartStream 文档指出,如果底层输入流未能遵循所需的语法 (RFC 1867),则会引发此特定错误 (MalformedStreamException)。但这不可能是因为您使用的是浏览器。您是否尝试过其他版本或夜间版本? 嗯,我们已经尝试降级到早期版本,但没有奏效。但我们还没有尝试过每晚构建 - 我猜这是我们可以尝试的剩余事情之一。 【参考方案1】:

如果你有时间或内存相关的问题,你看过commons文件上传的streaming API吗?

【讨论】:

是的。我们查看了源代码,发现它使用了我们遇到问题的类 - org.apache.commons.fileupload.MultipartStream。【参考方案2】:

看看这些设置,默认限制为 8MB

upload_max_filesize
post_max_size

【讨论】:

这些设置在哪里?在公共文件上传本身?我有一个快速的谷歌,它们似乎是 Apache 设置。我们没有使用 Apache.. 在文档 (commons.apache.org/fileupload/using.html) 中,它说您可以通过 upload.setSizeMax(yourMaxRequestSize); 设置上传的最大上传大小 - 但此值的默认值为 -1,没有限制。

以上是关于Apache commons 文件上传替代方案的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot:使用 Apache Commons FileUpload 上传大型流文件

Apache Commons FileUpload实现文件上传

Spring MVC - AngularJS - 文件上传 - org.apache.commons.fileupload.FileUploadException

Apache Commons Net FTP 正在上传损坏的文件

文件上传

文件上传之Apache commons fileupload使用