1. 新增com/example/demo/controller/FileController.java
package com.example.demo.controller; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.example.demo.common.Result; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.util.List; @RestController @RequestMapping("/files") public class FileController { /** * 上传接口 * @param file * @return * @throws IOException */ @PostMapping ("/upload") public Result<?> upload(MultipartFile file) throws IOException { String originalFilename = file.getOriginalFilename(); //获取文件的名称 String flag = IdUtil.fastSimpleUUID(); //定义文件的唯一标识(前缀),防止重复文件覆盖 String rootFilePath = System.getProperty("user.dir") + "/springbootdemo/src/main/resources/files/" + flag + "_" + originalFilename;//获取上传的路径 FileUtil.writeBytes(file.getBytes(),rootFilePath); //文件写入上传的路径 return Result.success(); //返回结果 } /** * 下载接口 * @param flag * @param response */ @GetMapping("/{flag}") public void getFiles(@PathVariable String flag, HttpServletResponse response){ OutputStream os; //新建一个输出流对象 String basePath = System.getProperty("user.dir") + "/springbootdemo/src/main/resources/files/";//定义文件路径 List<String> fileNames = FileUtil.listFileNames(basePath); //获取所有文件名称 String fileName = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");//找到与flag匹配的文件 try { if(StrUtil.isNotEmpty(fileName)){ response.addHeader("Content-Dispositon", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/octet-stream"); byte[] bytes = FileUtil.readBytes(basePath + fileName);//通过文件路径读取文件字节流 os = response.getOutputStream();//通过输出流返回文件 os.write(bytes); os.flush(); os.close(); } } catch (Exception e) { System.out.println("文件下载失败"); } } }
使用Postman测试效果,官网下载地址:https://www.postman.com/
上传文件
后台:
下载文件:选择 Send and Download,下载后返回流,自己重命名保存
标签:文件,vue,java,springboot,上传下载,flag,import,os,String From: https://www.cnblogs.com/xiexieyc/p/18278061