本节内容是建立在上一节内容的基础上,如果没有看上节内容,请查看上一节内容《springboot实现单个文件上传(图片 文档 视频 音频都可以上传)》
准备工作
开发工具:IntelliJ idea(需要破解,前面章节有讲)
创建一个springboot项目(前面章节有讲)
创建一个用来上传文件的html文件
创建一个用来接收文件的controller
一,创建uploads.html用来选择多个文件
先来看下上一节的upload.html单文件上传的页面
image
再来看下本节的uploads.html多文件上传的页面
image
对比下可以看到,多文件上传只需要多一个 multiple="multiple" 属性就可以了
下面贴出来uploads.html 完整代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>上传多个文件到服务器</title></head><body><form action="/uploads" method="post" enctype="multipart/form-data"> <input type="file" name="uploadFiles" value="请选择文件" multiple="multiple" > <input type="submit" value="上传"></form></body></html>
二,定义接收多文件的controller文件
image
可以看出,我们就在上一节单文件上传的UploadController里添加了一个多文件上传的uploads方法
完整代码给大家贴出来
/** * Created by qcl on 2019-06-11 * desc: 文件上传 */@RestController public class UploadController { //单个文件的上传 @PostMapping("/upload") public String upload(MultipartFile uploadFile, HttpServletRequest request) { /* 定义文件的存储路径,如下,是在linux和mac上定义的文件路径 /private/var/folders/8x/4zvnbqmj1w33cqmzrpygzbth0000gn/T/tomcat-docbase.5206733816001100271.8080/uploadFile */ String realPath = request.getSession().getServletContext().getRealPath("/uploadFile/"); File dir = new File(realPath); if (!dir.isDirectory()) {//文件目录不存在,就创建一个 dir.mkdirs(); } try { String filename = uploadFile.getOriginalFilename(); //服务端保存的文件对象 File fileServer = new File(dir, filename); System.out.println("file文件真实路径:" + fileServer.getAbsolutePath()); //2,实现上传 uploadFile.transferTo(fileServer); String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/uploadFile/" + filename; //3,返回可供访问的网络路径 return filePath; } catch (IOException e) { e.printStackTrace(); } return "上传失败"; } //多个文件的上传 @PostMapping("/uploads") public String uploads(MultipartFile[] uploadFiles, HttpServletRequest request) { //1,对文件数组做判空操作 if (uploadFiles == null || uploadFiles.length < 1) { return "文件不能为空"; } //2,定义文件的存储路径, String realPath = request.getSession().getServletContext().getRealPath("/uploadFile/"); File dir = new File(realPath); if (!dir.isDirectory()) {//文件目录不存在,就创建一个 dir.mkdirs(); } try { String filePathS = ""; //3,遍历文件数组,一个个上传 for (int i = 0; i < uploadFiles.length; i++) { MultipartFile uploadFile = uploadFiles[i]; String filename = uploadFile.getOriginalFilename(); //服务端保存的文件对象 File fileServer = new File(dir, filename); System.out.println("file文件真实路径:" + fileServer.getAbsolutePath()); //2,实现上传 uploadFile.transferTo(fileServer); String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/uploadFile/" + filename; filePathS = filePathS + "\n" + filePath; } //4,返回可供访问的网络路径 return filePathS; } catch (IOException e) { e.printStackTrace(); } return "上传失败"; } }
到这里我们多文件上传的代码就全部实现了。
三,启动项目(三种方式~推荐第一种)
1,点击绿色箭头(最简便,提倡)
image
2,点击main方法前的绿色箭头
image
3,命令行输入 mvn spring-boot:run
image
四,验证
1,输入下图的链接,进入文件选择页
image
2,选择多个文件,我们这里选择3个图片,一个视频
image
image
3,点击上传,然后上传成功如下图
image
4,查看图片,可以通过上图的链接查看已经传到后台的图片
image
5,查看视频(这样就可以在线查看已经上传到服务器的视频了)
到这里,我们多个文件的上传也成功的实现了。
源码地址:https://github.com/qiushi123/springboot-demos