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条)