目录
文件上传下载
文件上传介绍
文件下载介绍
代码具体实现
@RestController
@Slf4j
@RequestMapping("/common")
public class CommonController {@GetMapping("/upload")
public R<String> upload(MultipartFile file) {}
}
file这里不能随便起名字的要跟浏览器里面的文件上传的name保持一致file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件就会被删除
转存文件
try { file.transferTo(new File("F:\\hello.jpg")); } catch (IOException e) { e.printStackTrace(); }
使用配置文件来规定路径
配置文件加入
wzx:
path: F:\
调用位置@Value("${wzx.path}")
private String basePath;
转存文件try {
file.transferTo(new File(basePath+"hello.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
转存的时候使用原来文件的名字
获取原文件的名字
String originalFilename = file.getOriginalFilename();
转存文件try {
file.transferTo(new File(basePath+originalFilename));
} catch (IOException e) {
e.printStackTrace();
}
UUID转存文件
不过一般都不建议使用上述的名字方法,相同的名字时会覆盖原来的文件,会丢失数据,采用uuid的方式命名会避免这种情况
String originalFilename = file.getOriginalFilename();
获取原文件名称
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
获取原文件名称的后缀从最后一个.开始的后缀
String fileName = UUID.randomUUID().toString() + suffix;
用uuid的随机id加上原文件的后缀
当转存文件的时候路径中的文件夹本次不存在,自动创建文件夹
//创建一个目录对象
File dir = new File(basePath);
//判断当前目录是否存在
if(!dir.exists()){
//目录不存在需要创建
dir.mkdirs();
}
文件上传
配置信息里面的文件路径
wzx: path: F:\wzxw\前后都要有不然会导致新建问价但是文件转存的时候不会进入指定文件夹
@RestController
@Slf4j
@RequestMapping("/common")
public class CommonController {
@Value("${wzx.path}")
private String basePath;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file) {
log.info(file.toString());
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileName = UUID.randomUUID().toString() + suffix;
//创建一个目录对象
File dir = new File(basePath);
//判断当前目录是否存在
if (!dir.exists()) {
//目录不存在需要创建
dir.mkdirs();
}
try {
file.transferTo(new File(basePath + fileName));
} catch (IOException e) {
e.printStackTrace();
}
return R.success(fileName);
}
文件下载
用来将上传的文件回显在浏览器上
@Value("${wzx.path}")
private String basePath;
/**
* 文件下载
* @param name
* @param response
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response) {
try {
//输入流,通过输入流读取文件内容
FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
//输出流,通过输出流将文件写回浏览器,在浏览器展示图片
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("image/jpeg");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fileInputStream.read(bytes)) != -1) {
//写入bytes从0写到len len是文件的总长度
outputStream.write(bytes, 0, len);
//刷新输出流
outputStream.flush();
}
//关闭资源
outputStream.close();
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}