本文已参与「新人创作礼」活动,一起开启掘金创作之路
上传文件 很简单 但是怎么用Springboot实现呢
其中用到了java的io包 和 http包
和为了防止文件过大 使用了MultipartFile类型来接受上传的文件名
SpringBoot之上传文件代码如下:
代码可直接粘贴运行 vue前端上传的方式在 这篇文章里 感兴趣的朋友们可自行去查看
package com.example.demo.ty;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.imageio.IIOException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
@PostMapping("/upload")
public String upload(MultipartFile uploadFile,HttpServletRequest req) {
String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
File folder = new File(realPath);
if(!folder.isDirectory()) {
folder.mkdirs();
}
String oldName = uploadFile.getOriginalFilename();
String newName = UUID.randomUUID ().toString ()+ oldName.substring (oldName.lastIndexOf ("."),oldName.length());
try {
uploadFile.transferTo(new File (folder,newName)) ;
String filePath = req.getScheme() + "://" + req.getServerName() + ": + "+ req. getServerPort () + "/uploadFile/"+ newName ;
return filePath;
}
catch (IOException e){
e.printStackTrace();
}
return "上传失败 ";
}
}
代码解释在下:
首先是先创建一个controll 记得带@RestController注解 不然这个类不会被注入到spring的ioc容器中 从而不能被识别到这个方法
然后在controller里面生成一个接受文件方法 接受类型为uploadFile 和一个服务器的请求头
然后开始从请求头里拿出要保存的路径
然后拿出文件要保存的路径 去生成一个文件对象(File folder = new File(realPath);)
然后检查是否已经生成了这个文件目录 如果没有则通过(folder.mkdirs();)方法去生成文件目录
然后获取到文件的上传名String oldName = uploadFile.getOriginalFilename(); 和通过UUID去生成一个随机的名字 为了防止文件上传太多文件名以不至于重复 而报错
然后开始最核心的一步 把上传的文件给写入到创建的文件夹里(uploadFile.transferTo(new File (folder,newName)) ; )
然后这一步是显示给你 让你知道文件是存在了那里(String filePath = req.getScheme() + "://" + req.getServerName() + ": + "+ req. getServerPort () + "/uploadFile/"+ newName ;)
这接受上传文件的简单demo 如果有多个文件 搞个MultipartFile数组 并循环读取它写如入就可以了