首先文件要有存放的地方
在application.yml中配置
spring:
servlet:
multipart:
location: /Users/chenweiqi/IdeaProjects/mq/temp/file
controller中接收,保存文件
@RequestMapping(value = "/test/upload/file",method = RequestMethod.POST)
public R upload(@RequestParam("file") MultipartFile multipartFile){
if (multipartFile.isEmpty()){
//文件为空的时候返回错误
return R.Error();
}
String fileName = multipartFile.getOriginalFilename();
//int size = (int) multipartFile.getSize();
File file = new File(fileName);
if (file.getParentFile()!=null && !file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
try {
//保存文件
multipartFile.transferTo(file);
} catch (IOException e) {
e.printStackTrace();
return R.Error();
}
return R.Ok();
}
文件保存了 现在前端请求需要返回文件了
controller 中定义变量。获取最开始定义的文件路径
@Value("${spring.servlet.multipart.location}")
String filePath;
返回文件有很多写法。这里通过 response 直接写入。
直接根据url请求获取文件名。读取后直接返回。
@RequestMapping(value = "/test/file/{fileName:[a-zA-Z0-9\\.]+}",method = RequestMethod.GET)
public void getFile(@PathVariable(name = "fileName") String fileName, HttpServletResponse response){
File file = new File(filePath+File.separator+fileName);
System.out.println(file);
if (!file.exists()){
throw new RuntimeException("文件不存在");
}
try {
FileInputStream fileInputStream =new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
byte[] temp = new byte[1024];
while(fileInputStream.read(temp) >0){
outputStream.write(temp);
}
fileInputStream.close();
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}