package com.example.springboot.controller; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.example.springboot.enity.Files; import com.example.springboot.mapper.FileMapper; import com.example.springboot.service.UserService; import jakarta.annotation.Resource; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.net.URLEncoder; /** * 文件上传相关接口 */ @RestController @RequestMapping("/file") public class FileController { @Autowired private UserService userService; // 将配置文件中的path读入 @Value("${files.upload.path}") private String fileUploadPath; @Resource private FileMapper fileMapper; /** * 文件上传接口 * @param file * @return * @throws IOException */ @PostMapping("/upload") public String upload(MultipartFile file) throws IOException { System.out.println("===============fileUpload============"); System.out.println("==========="+fileUploadPath); String originalFilename = file.getOriginalFilename(); String type = FileUtil.extName(originalFilename); long size = file.getSize(); // 先存储到磁盘 File uploadParentFile = new File(fileUploadPath); // 判断配置的文件目录是否存在,若不存在则创建一个新的文件目录 if(!uploadParentFile.exists()){ uploadParentFile.mkdirs(); } // 定义一个文件唯一的标识码 String uuid = IdUtil.fastSimpleUUID(); String fileUuid = uuid + StrUtil.DOT + type; File uploadFile = new File(fileUploadPath + fileUuid); //把获取到的文件存储到磁盘目录去 file.transferTo(uploadFile); String url = "http://localhost:8080/file/" + fileUuid; // 存储数据库 Files saveFile = new Files(); saveFile.setName(originalFilename); saveFile.setType(type); saveFile.setSize(size/1024); saveFile.setUrl(url); fileMapper.insert(saveFile); return url; } /** * 文件下载接口 http://localhost:8080/file/{fileUUID} * @param fileUUID * @param response * @throws IOException */ @GetMapping("/{fileUUID}") public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException { System.out.println("============downloadFile==========="); //根据文件的唯一标识码获取文件 File uploadFile = new File(fileUploadPath + fileUUID); // 设置输出流的格式 ServletOutputStream os = response.getOutputStream(); response.addHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileUUID,"UTF-8")); response.setContentType("application/octet-stream"); //读取文件的字节流 os.write(FileUtil.readBytes(uploadFile)); os.flush(); os.close(); } }
通过localhost:8080/file/upload上传文件
通过localhost:8080/file/+文件序号 下载文件