如何在Spring Boot中同时上传多个文件

如何在Spring Boot中同时上传多个文件,第1张

@RequestMapping(value="/batch/upload", method=RequestMethod.POST)

public @ResponseBody

String handleFileUpload(HttpServletRequest request){

List<MultipartFile>files =((MultipartHttpServletRequest)request).getFiles("file")

MultipartFile file = null

BufferedOutputStream stream = null

for (int i =0i<files.size()++i) {

file = files.get(i)

if (!file.isEmpty()) {

try {

byte[] bytes = file.getBytes()

stream =

new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())))

stream.write(bytes)

stream.close()

} catch (Exception e) {

stream = null

return "You failed to upload " + i + " =>" + e.getMessage()

}

} else {

return "You failed to upload " + i + " becausethe file was empty."

}

}

return "upload successful"

}

这是后台的实现,如果需要前端的实现,请回复

不管什么技术,超大文件上传(超出一次tcp上限)都是要做分片和合并的,无非是自己做还是找控件的差别。

另外,springboot是后台接收,前端实现是由前端框架负责,比如vue。

以下是Vue+Springboot实现大文件上传的二种方式:

1、利用ElementUI的el-upload

优点:

简单方便,可以实现功能

缺点:

上传速度太慢,没有分片单线程上传1个G的文件即使在局域网也很慢

上传显示的进度条不准确,进度已经100%了,但是还需要等很久在服务端才生成完文

2、利用百度的webuploader

优点:

WebUploader是网上比较推荐的方式,分片上传大文件速度很快。

缺点:

必须依赖 jquery

不能 import 导入,只能在 index.html 里包含。

3. 利用vue-uploader

vue-uploader 是基于vue的uploader组件,缺省就是分片上传。

通过npm安装,基本流程参考github上的说明即可。

上传的基本原理就是前端根据文件大小,按块大小分成很多块,然后多线程同时上传多个块,同时调用服务端的上传接口,服务端会生成很多小块小块的文件。

所有块都上传完之后,前端再调用一个服务端的merge接口,服务端把前面收到的所有块文件按顺序组合成最终的文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11559416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存