diff --git a/src/main/java/com/controller/NxSystemFileController.java b/src/main/java/com/controller/NxSystemFileController.java new file mode 100644 index 0000000..4a42be7 --- /dev/null +++ b/src/main/java/com/controller/NxSystemFileController.java @@ -0,0 +1,138 @@ +package com.example.controller; + +import cn.hutool.core.io.FileUtil; +import com.example.common.Result; +import com.example.entity.NxSystemFileInfo; +import com.example.exception.CustomException; +import com.example.service.NxSystemFileInfoService; +import com.github.pagehelper.PageInfo; +import net.coobird.thumbnailator.Thumbnails; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/files") +public class NxSystemFileController { + + private static final String BASE_PATH = System.getProperty("user.dir") + "/src/main/resources/static/file/"; + + @Resource + private NxSystemFileInfoService nxSystemFileInfoService; + + @PostMapping("/upload") + public Result upload(MultipartFile file, HttpServletRequest request) throws IOException { + String originName = file.getOriginalFilename(); + // 1. 先查询有没有相同名称的文件 +// NxSystemFileInfo fileInfo = nxSystemFileInfoService.findByFileName(name); +// if (fileInfo != null) { +// throw new CustomException("1001", "文件名:\"" + name + "\"已存在"); +// } + // 文件名加个时间戳 + String fileName = FileUtil.mainName(originName) + System.currentTimeMillis() + "." + FileUtil.extName(originName); + + // 2. 文件上传 + FileUtil.writeBytes(file.getBytes(), BASE_PATH + fileName); + + // 3. 信息入库,获取文件id + NxSystemFileInfo info = new NxSystemFileInfo(); + info.setOriginName(originName); + info.setFileName(fileName); + NxSystemFileInfo addInfo = nxSystemFileInfoService.add(info); + if (addInfo != null) { + return Result.success(addInfo); + } else { + return Result.error("4001", "上传失败"); + } + } + + @PostMapping("/notice/upload") + public Result> noticeUpload(MultipartFile file, HttpServletRequest request) throws IOException { + String originName = file.getOriginalFilename(); + // 文件名加个时间戳 + String fileName = FileUtil.mainName(originName) + System.currentTimeMillis() + "." + FileUtil.extName(originName); + // 2. 缩小尺寸 + FileUtil.mkdir(BASE_PATH); + Thumbnails.of(file.getInputStream()).width(400).toFile(BASE_PATH + fileName); + + // 3. 信息入库,获取文件id + NxSystemFileInfo info = new NxSystemFileInfo(); + info.setOriginName(originName); + info.setFileName(fileName); + NxSystemFileInfo addInfo = nxSystemFileInfoService.add(info); + + Map map = new HashMap<>(2); + map.put("src", "/files/download/" + addInfo.getId()); + map.put("title", originName); + return Result.success(map); + } + + @GetMapping("/page/{name}") + public Result> filePage(@PathVariable String name, + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + + PageInfo pageInfo = nxSystemFileInfoService.findPage(name, pageNum, pageSize); + return Result.success(pageInfo); + } + + @GetMapping("/download/{id}") + public void download(@PathVariable String id, HttpServletResponse response) throws IOException { + if ("null".equals(id)) { + throw new CustomException("1001", "您未上传文件"); + } + NxSystemFileInfo nxSystemFileInfo = nxSystemFileInfoService.findById(Long.parseLong(id)); + if (nxSystemFileInfo == null) { + throw new CustomException("1001", "未查询到该文件"); + } + byte[] bytes = FileUtil.readBytes(BASE_PATH + nxSystemFileInfo.getFileName()); + response.reset(); + // 设置response的Header + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(nxSystemFileInfo.getOriginName(), "UTF-8")); + response.addHeader("Content-Length", "" + bytes.length); + OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); + response.setContentType("application/octet-stream"); + toClient.write(bytes); + toClient.flush(); + toClient.close(); + } + + @DeleteMapping("/{id}") + public Result deleteFile(@PathVariable String id) { + NxSystemFileInfo nxSystemFileInfo = nxSystemFileInfoService.findById(Long.parseLong(id)); + if (nxSystemFileInfo == null) { + throw new CustomException("1001", "未查询到该文件"); + } + String name = nxSystemFileInfo.getFileName(); + // 先删除文件 + FileUtil.del(new File(BASE_PATH + name)); + // 再删除表记录 + nxSystemFileInfoService.delete(Long.parseLong(id)); + + return Result.success(); + } + + @GetMapping("/{id}") + public Result getById(@PathVariable String id) { + NxSystemFileInfo nxSystemFileInfo = nxSystemFileInfoService.findById(Long.parseLong(id)); + if (nxSystemFileInfo == null) { + throw new CustomException("1001", "数据库未查到此文件"); + } + try { + FileUtil.readBytes(BASE_PATH + nxSystemFileInfo.getFileName()); + } catch (Exception e) { + throw new CustomException("1001", "此文件已被您删除"); + } + return Result.success(nxSystemFileInfo); + } +}