基于SpringBoot的文件上传与下载

基于SpringBoot的文件上传与下载,第1张

基于SpringBoot的文件上传与下载

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的文件上传(前端)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5707112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存