package com.backendsys.modules.upload.controller; import cn.hutool.core.convert.Convert; import com.backendsys.modules.common.config.security.utils.HttpRequestUtil; import com.backendsys.modules.common.utils.Result; import com.backendsys.modules.sse.emitter.SseEmitterManager; import com.backendsys.modules.sse.utils.SseEmitterUTF8; import com.backendsys.modules.upload.entity.SysUpload; import com.backendsys.modules.upload.service.SysUploadService; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.io.IOException; @Validated @RestController @Tag(name = "上传文件") public class SysUploadController { @Autowired private HttpRequestUtil httpRequestUtil; @Autowired private SysUploadService sysUploadService; /** * 获取上传文件列表 * - 缩略图 (?imageView2/1/w/100/h/100/q/60) */ @GetMapping("/api/v2/upload/getUploadFileList") public Result getUploadFileList(@Validated SysUpload sysUpload) { return Result.success().put("data", sysUploadService.selectUploadList(sysUpload)); } /** * 上传文件 (普通上传,单文件上传不超过 20MB) */ @PreAuthorize("@ss.hasPermi(1.1)") @PostMapping("/api/upload/uploadSmall") public Result uploadSmall(@RequestParam("file") MultipartFile multipartFile, Long category_id) { return Result.success().put("data", sysUploadService.uploadSmall(multipartFile, category_id)); } /** * [SSE] 上传进度监听 */ @GetMapping(value = "/api/sse/stream/upload", produces = "text/event-stream;charset=UTF-8") public SseEmitter streamUpload() { String userId = Convert.toStr(httpRequestUtil.getUserId()); SseEmitterUTF8 emitter = new SseEmitterUTF8(Long.MAX_VALUE); SseEmitterManager manager = SseEmitterManager.getInstance(); manager.addEmitter(userId, emitter); try { // 创建新连接 manager.addEmitter(userId, emitter); emitter.send(SseEmitter.event().data("Connected successfully! (连接成功)")); } catch (IOException e) { // 关闭连接 manager.emitters.remove(emitter); } return emitter; } // /** // * [SSE] 测试发送 // */ // @GetMapping("/api/v2/sse/send") // public String send() { // String message = "{\"message\": \"Hello World\"}"; // sseUtil.send(httpRequestUtil.getUserId(), message); // return "success"; // } /** * 删除上传文件 */ @PreAuthorize("@ss.hasPermi(1.1)") @DeleteMapping("/api/v2/upload/removeUploadFile") public Result removeUploadFile(@Validated(SysUpload.Delete.class) @RequestBody SysUpload sysUpload) { return Result.success().put("data", sysUploadService.removeUploadFile(sysUpload)); } }