Quellcode durchsuchen

文件上传及分类问题处理

liude vor 1 Jahr
Ursprung
Commit
47eeb97b5b

+ 6 - 0
pom.xml

@@ -22,6 +22,7 @@
         <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
         <framework-oauth.version>1.0.0-RELEASE</framework-oauth.version>
         <framework-security.version>1.0.0-RELEASE</framework-security.version>
+        <framework-upload.version>1.0.0-RELEASE</framework-upload.version>
     </properties>
 
     <dependencies>
@@ -40,6 +41,11 @@
             <artifactId>framework-sms</artifactId>
             <version>${framework-sms.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.chelvc.framework</groupId>
+            <artifactId>framework-upload</artifactId>
+            <version>${framework-upload.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.chelvc.framework</groupId>
             <artifactId>framework-redis</artifactId>

+ 2 - 0
src/main/java/com/chelvc/cloud/admin/controller/DynamicCommentController.java

@@ -4,6 +4,7 @@ import com.chelvc.cloud.vehicle.api.dto.DynamicCommentDTO;
 import com.chelvc.cloud.vehicle.api.param.ExamineDynamicParam;
 import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
 import com.chelvc.cloud.vehicle.api.service.DynamicCommentService;
+import com.chelvc.framework.base.annotation.ResponseWrapping;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import lombok.RequiredArgsConstructor;
@@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
 @RequiredArgsConstructor
 @RestController
 @RequestMapping("/comment")
+@ResponseWrapping
 public class DynamicCommentController {
 
   @DubboReference

+ 2 - 0
src/main/java/com/chelvc/cloud/admin/controller/DynamicContentController.java

@@ -5,6 +5,7 @@ import com.chelvc.cloud.vehicle.api.param.EditShieldDynamicParam;
 import com.chelvc.cloud.vehicle.api.param.ExamineDynamicParam;
 import com.chelvc.cloud.vehicle.api.param.QueryAdminDynamicParam;
 import com.chelvc.cloud.vehicle.api.service.DynamicContentService;
+import com.chelvc.framework.base.annotation.ResponseWrapping;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import lombok.RequiredArgsConstructor;
@@ -24,6 +25,7 @@ import javax.validation.constraints.NotNull;
 @RequiredArgsConstructor
 @RestController
 @RequestMapping("/content")
+@ResponseWrapping
 public class DynamicContentController {
 
     @DubboReference

+ 71 - 0
src/main/java/com/chelvc/cloud/admin/controller/FileController.java

@@ -0,0 +1,71 @@
+package com.chelvc.cloud.admin.controller;
+
+import com.chelvc.framework.base.annotation.ResponseWrapping;
+import com.chelvc.framework.common.model.File;
+import com.chelvc.framework.common.model.Media;
+import com.chelvc.framework.common.util.FileUtils;
+import com.chelvc.framework.common.util.ObjectUtils;
+import com.chelvc.framework.common.util.StringUtils;
+import com.chelvc.framework.upload.UploadHandler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * 文件接口
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Slf4j
+@Validated
+@RestController
+@ResponseWrapping
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class FileController {
+    private final UploadHandler uploadHandler;
+
+    /**
+     * 获取文件媒体类型
+     *
+     * @param file 文件对象
+     * @return 媒体类型
+     */
+    private Media getMedia(MultipartFile file) {
+        MediaType type = null;
+        try {
+            type = StringUtils.ifEmpty(file.getContentType(), MediaType::parseMediaType);
+        } catch (Exception e) {
+            log.debug("Media type parse failed: {}", e.getMessage());
+        }
+        String value = StringUtils.ifEmpty(StringUtils.ifEmpty(type, MediaType::getType), String::toUpperCase);
+        return ObjectUtils.ifNull(StringUtils.ifEmpty(value, Media::parse), Media.NORMAL);
+    }
+
+    /**
+     * 上传文件
+     *
+     * @param file 文件对象
+     * @return 文件地址
+     * @throws IOException I/O异常
+     */
+    @PostMapping("/file")
+    public File upload(@RequestParam("file") MultipartFile file) throws IOException {
+        Media media = this.getMedia(file);
+        String filename = file.getOriginalFilename();
+        String suffix = StringUtils.ifEmpty(filename, FileUtils::getSuffix);
+        try (InputStream stream = file.getInputStream()) {
+            String url = this.uploadHandler.upload(stream, suffix);
+            return File.builder().name(filename).media(media).url(url).build();
+        }
+    }
+}

+ 0 - 1
src/main/java/com/chelvc/cloud/admin/controller/HelpCategoryController.java

@@ -29,7 +29,6 @@ import javax.validation.constraints.Min;
 @Validated
 @RestController
 @ResponseWrapping
-@PreAuthorize("isScope('EMPLOYEE')")
 public class HelpCategoryController {
     @DubboReference
     private IHelpCategoryService helpCategoryService;

+ 0 - 1
src/main/java/com/chelvc/cloud/admin/controller/HelpController.java

@@ -28,7 +28,6 @@ import javax.validation.constraints.Min;
 @Validated
 @RestController
 @ResponseWrapping
-@PreAuthorize("isScope('EMPLOYEE')")
 public class HelpController {
     @DubboReference
     private IHelpService helpService;