Chunks 和 Multipart 以不同的方式做同样的事情
块使上传将整个文件“分割”成小块(块)
这允许将非常大的文件(也可以是 1GB)分割成较小的部分并将它们发送到服务器,而不会出现浏览器中的连接超时问题;然后由服务器端处理这些块
您可以使用多个 JS 上传库来存储块(例如https://blueimp.github.io/jQuery-File-Upload/ https://blueimp.github.io/jQuery-File-Upload/ or http://www.plupload.com/ 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());
}
}
正如你所看到的,我首先检查是否收到整个文件;如果不是,我以追加模式写入文件,否则我将其全部写入
我希望这有用
Angelo