package com.mindskip.xzs.controller.common; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.configuration.RuoYiConfig; import lombok.RequiredArgsConstructor; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; import java.util.HashMap; import java.util.UUID; /** * @author:xp * @date:2024/5/15 17:02 */ @RestController @RequiredArgsConstructor @RequestMapping("/api/upload") public class UploadController { private final RuoYiConfig ruoYiConfig; /** * 通用上传请求(单个) */ @PostMapping("/upload") public RestResponse uploadFile(MultipartFile file) throws Exception { // 检查文件是否为空 if (file.isEmpty()) { return RestResponse.fail(500, "上传的文件为空"); } try { // 获取文件名 String originalFileName = StringUtils.cleanPath(file.getOriginalFilename()); String randomName = UUID.randomUUID().toString().replace("-", "") + originalFileName.substring(originalFileName.lastIndexOf(".")); // 指定文件存储路径 String uploadDir = ruoYiConfig.getUrl(); // 修改为您希望存储的目录 // 如果目录不存在,则创建目录 File dir = new File(uploadDir); if (!dir.exists()) { dir.mkdirs(); } // 构建目标文件的路径 String filePath = uploadDir + "/" + randomName; // 将文件保存到目标位置 file.transferTo(new File(filePath)); // 返回成功响应 HashMap hashMap = new HashMap(2); hashMap.put("name", originalFileName); hashMap.put("url", randomName); return RestResponse.ok(hashMap); } catch (IOException e) { e.printStackTrace(); // 返回失败响应 return RestResponse.fail(500, "文件上传失败"); } } /** * 下载文件(单个) */ @GetMapping("/download") public void download(@RequestParam String url, @RequestParam String fileName, HttpServletResponse response) throws Exception { // 提取文件路径 String filePath = ruoYiConfig.getUrl() + File.separator + url; File file = new File(filePath); // 检查文件是否存在 if (!file.exists()) { throw new RuntimeException("文件不存在"); } // 读取文件内容 byte[] fileContent = Files.readAllBytes(file.toPath()); // 设置响应头 response.setHeader("Content-Disposition", "attachment; filename=" + fileName); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); // 将文件内容写入响应输出流 response.getOutputStream().write(fileContent); response.getOutputStream().flush(); } }