
1、设置文件保存目录
可以在yml文件中定义一个用于保存文件的路径(这个路径是mac系统的):
resource:
folder:
icon: /Users/XXXX/Desktop/tempfiles/icon
2、加载上述路径
@Value("${resource.folder.icon}")
private String folderIcon;
3、接收上传的文件
@PostMapping("/upload_icon")
Result uploadIcon(@RequestParam(value = "bandIcon") MultipartFile bandIcon) {
if (bandIcon.isEmpty()) {
return Result.error(20001, "图片为空!");
}
// 保存时的文件名
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String dateName = df.format(Calendar.getInstance().getTime());
// 保存文件的绝对路径
String filePath = folderIcon + File.separator + dateName;
File iconFile = new File(filePath);
try {
bandIcon.transferTo(iconFile);
} catch (IOException e) {
return Result.error(20002, e.getLocalizedMessage());
}
String iconUrl = File.separator + "icon" + File.separator + dateName;
return Result.success(iconUrl);
}
用当前时间做文件名。
另外,要注意返回的iconUrl为相对路径
4、下载指定文件
@GetMapping("/icon/{filename}")
void downloadIcon(HttpServletResponse response, @PathVariable("filename") String filename) throws UnsupportedEncodingException {
//
String filePath = folderIcon + File.separator + filename;
File iconFile = new File(filePath);
if (iconFile.exists()) {
response.setContentType("application/octet-stream");
response.setHeader("content-type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename, "utf8"));
// 输出流
try (FileInputStream fis = new FileInputStream(iconFile);
BufferedInputStream bis = new BufferedInputStream(fis);) {
OutputStream os = response.getOutputStream();
// 从文件中读数据并写入输出流
byte[] buffer = new byte[1024];
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer);
i = bis.read(buffer);
}
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意GetMapping中的路径,要与上传文件的保存路径相匹配
前端代码:
基于antdv的文件上传(前端)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)