使用Chunks和MultipartFileupload的fileupload

时间:2016-10-27 14:32:04

标签: java spring

上传使用块和MultipartFile上传相同。有什么区别? 我尝试使用Multipartfile上传。 我的要求是将50 MB的appx文件上传到服务器,而不会让用户等待很长时间。大概需要大约2分钟。

1 个答案:

答案 0 :(得分:2)

Chunks和Multipart以不同的方式做同样的事情

Chunks上传"分裂"整个文件是小块(块)

这允许将非常大的文件(也是1GB)拆分成较小的块并将它们发送到服务器而不会在浏览器中出现连接超时问题;然后它由服务器端处理块

您可以为这些块使用多个JS上传库(例如https://blueimp.github.io/jQuery-File-Upload/http://www.plupload.com/等等)

相反,Multipart会一次上传文件;如果文件是1MB,那么所有1MB都被上传,如果它是1GB则所有1GB都被加载

关于传输速度,我猜它是与带宽和互联网连接相关的东西

我希望这可以帮到你

服务器端存储管理示例

正如我告诉你的那样,服务器端需要管理块;我强烈要避免将内存存储在内存块中,因为你应该分配大量的内存(如果文件是1GB,你应该为每次上传分配1GB而这个)

在我的旧项目中,我使用了plupload,这是我如何在服务器端管理块的提取(注意:使用Spring完成的代码)

RequestMapping(method = { RequestMethod.POST }, value = { "/plupload" })
public ResponseEntity<List<UploadMediaResultDto>> uploadMedia(
                @RequestParam(required = true, value = "file") MultipartFile file, 
                @RequestParam(required = false, value = "name") String name, 
                @RequestParam(required = false, value = "chunks") Integer chunks, 
                @RequestParam(required = false, value = "chunk") Integer chunk)
{
boolean fullFile = false;
File theFile = new File(filePath);
if (chunk != null && chunks != null && (chunk == 0 && chunks == 1))
{
    fullFile = true;
}
if (!fullFile)
{
FileUtils.writeByteArrayToFile(theFile, file.getBytes(), append);
}
else
{
FileUtils.writeByteArrayToFile(theFile, file.getBytes());
}
}

正如您所见,我检查是否收到了整个文件;如果不是我用附加模式写文件,否则我总是写

我希望这很有用

安吉洛