2009-04-13 118 views
2

我有一个Struts 1 web应用程序,需要将相当大的文件(> 50 MBytes)从客户端上传到服务器。我目前使用其内置的org.apache.struts.upload.DiskMultipartRequestHandler来处理HTTP POST multipart/form-data请求。它工作正常,但速度非常慢,上传速度约为每秒100千字节。Struts上传速度较慢

将相同的大文件从服务器下载到客户端的速度要快10倍以上。我不认为这只是我的ISP的上传和下载速度之间的差异,因为使用简单的FTP客户端将文件传输到同一台服务器的时间不到三分之一。

我已经着眼于用新的org.apache.commons.fileupload包替换内置的DiskMultipartRequestHandler,但我不确定如何修改它以创建Struts 1需要的MultipartRequestHandler。

Barend下面评论说,有一个'bufferSize'参数可以在web.xml中设置。我将缓冲区的大小增加到了100 KB,但并未提高性能。看看DiskMultipartRequestHandler的实现,我怀疑它的性能可能是有限的,因为它一次读取一个字节的流,查找多部分边界字符。

是否有其他人使用Struts上传大文件?

有没有人定制了Struts 1提供的默认DiskMultipartRequestHandler?

我是否需要在上传大文件时更耐心呢? :-)

回答

2

Apache wiki上的页面StrutsFileUpload包含一组您可以使用的配置设置。一个突出的我是4096字节的默认缓冲区大小。如果还没有,请尝试将其设置为更大的值(但不要将每个上传的缓冲区分配得过大)。 2MB的值似乎是合理的。我怀疑这会大大提高上传速度。

+0

这是一个好主意!之前我没有注意到。谢谢!不幸的是,我现在刚刚尝试过,并没有真正改变。 – 2009-04-14 13:59:31

1

使用Apache Commons, 这给上传文件提供了更大的灵活性。我们可以配置上传文件大小(最大文件大小)和用于交换文件的临时文件位置(这可以提高性能)。 请访问此链接http://commons.apache.org/fileupload/using.html

+0

我发现这个实现更加灵活,甚至可以在决定将其存储到磁盘之前保留整个上载内存。但是,它会影响非常大(> 50 MBytes)的文件吗? – 2009-04-16 14:17:02