Springboot中MultipartFile的使用
文件的上传
- 上传文件是项目中必不可少的操作,用到MultipartFile来做文件上传省时省力
- MultipartFile接值的时候不能放在实体类中,不然会接不到值
@ApiOperation("添加人员")
@RequestMapping(value = "savaPrsonnel",method = RequestMethod.POST)
public int savaPrsonnel(@RequestParam(value = "files",required = false) MultipartFile files , Prsonnel prsonnel) throws IOException {
return service.savaPrsonnel(files,prsonnel);
}
- 在层对文件进行操作,将操作的数据保存在服务器,然后路径存入到mysql中
// String realFilename = file.getOriginalFilename(); //文件名字
String type = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));//文件类型
String filename = System.currentTimeMillis() + type;//当前时间戳
String path=val+filename;
File destFile= new File(path);
FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);// 复制临时文件到指定目录下
文件的下载
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
QueryWrapper<AttachMent> fileMentQueryWrapper = new QueryWrapper<AttachMent>();
fileMentQueryWrapper.eq("S_ID",id);
AttachMent attachMent = attachMentDao.selectOne(fileMentQueryWrapper);
String path=attachMent.getSurl();//获取存储于mysql中的已经上传图片的逻辑名
String filename=attachMent.getSname();//获取存储于mysql中的已经上传图片的逻辑名
response.setContentType("text/html; charset=UTF-8");
response.setContentType("image/jpeg");
File tempFile =new File(path);
System.err.println(path);
InputStream inputStream = new FileInputStream(tempFile);
OutputStream os = response.getOutputStream();
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
os.flush();
os.close();
inputStream.close();
- 逻辑: 在数据库中通过id去读取数据,获取到本地的地址
- 读流操作,设置返回的状态,直接喷到页面中展示
response.setContentType(“text/html; charset=UTF-8”);
response.setContentType(“image/jpeg”); - 最后将地址拼一下,返回给前段数据就能展示了