deason 6 rokov pred
rodič
commit
84b6a2769e

+ 23 - 0
examcloud-core-print-common/src/main/java/cn/com/qmth/examcloud/core/print/common/upyun/UpYunClient.java

@@ -7,7 +7,12 @@
 
 package cn.com.qmth.examcloud.core.print.common.upyun;
 
+import cn.com.qmth.examcloud.core.print.common.Result;
+import cn.com.qmth.examcloud.core.print.common.utils.Check;
+import cn.com.qmth.examcloud.core.print.common.utils.FileUtils;
 import main.java.com.UpYun;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -17,9 +22,27 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class UpYunClient {
+    private static final Logger log = LoggerFactory.getLogger(UpYunClient.class);
     @Autowired
     private UpYunProperty upYunProperty;
 
+    public Result upload(byte[] bytes, String originalFilename) {
+        Check.isEmpty(bytes, "上传的文件不能为空!");
+        Check.isBlank(originalFilename, "上传的文件名不正确!");
+        try {
+            final String newFileName = FileUtils.newFileName(originalFilename);
+            final String newFilePath = upYunProperty.getUploadUrl() + FileUtils.dateDir() + newFileName;
+            this.getInstance().writeFile(newFilePath, bytes, true);
+
+            //成功后,返回文件访问地址
+            final String url = upYunProperty.getFileUrl() + newFilePath;
+            return Result.success(url);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return Result.error();
+    }
+
     public UpYun getInstance() {
         UpYun upyun = new UpYun(upYunProperty.getBucket(), upYunProperty.getOperator(), upYunProperty.getPsw());
         upyun.setDebug(true);

+ 6 - 0
examcloud-core-print-common/src/main/java/cn/com/qmth/examcloud/core/print/common/utils/Check.java

@@ -59,6 +59,12 @@ public class Check {
         }
     }
 
+    public static void isTrue(Boolean expression, String message) {
+        if (expression != null && expression) {
+            throw new StatusException(PRT_CODE_400, message);
+        }
+    }
+
     public static void isFalse(Boolean expression, String message) {
         if (expression == null || !expression) {
             throw new StatusException(PRT_CODE_400, message);

+ 27 - 2
examcloud-core-print-provider/src/main/java/cn/com/qmth/examcloud/core/print/api/controller/UploadController.java

@@ -8,13 +8,22 @@
 package cn.com.qmth.examcloud.core.print.api.controller;
 
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.core.print.common.Result;
+import cn.com.qmth.examcloud.core.print.common.upyun.UpYunClient;
 import cn.com.qmth.examcloud.core.print.common.upyun.UpYunProperty;
+import cn.com.qmth.examcloud.core.print.common.utils.Check;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * 文件上传相关接口
@@ -26,13 +35,29 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "文件上传相关接口")
 @RequestMapping("${$rmp.ctrl.print}/upload")
 public class UploadController extends ControllerSupport {
+    private static final Logger log = LoggerFactory.getLogger(UploadController.class);
     @Autowired
-    private UpYunProperty upYunProperty;
+    private UpYunClient upYunClient;
+
+    @PostMapping
+    @ApiOperation(value = "上传文件")
+    public Result upload(HttpServletRequest request) throws Exception {
+        MultipartFile file = null;
+        try {
+            //暂时只支持单文件上传,默认处理一个文件
+            file = ((MultipartHttpServletRequest) request).getFile("file");
+        } catch (Exception e) {
+            log.warn(e.getMessage());
+        }
+        Check.isNull(file, "上传的文件不能为空!");
+        Check.isTrue(file.isEmpty(), "上传的文件不能为空!");
+        return upYunClient.upload(file.getBytes(), file.getOriginalFilename());
+    }
 
     @PostMapping("/upyun/info")
     @ApiOperation(value = "获取又拍云信息")
     public UpYunProperty getUpYunInfo() {
-        return upYunProperty;
+        return upYunClient.getProperty();
     }
 
 }

+ 2 - 2
examcloud-core-print-starter/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 spring.profiles.active=test
 #mvc config
 server.port=8089
-spring.http.multipart.max-file-size=50Mb
-spring.http.multipart.max-request-size=50Mb
+spring.http.multipart.max-file-size=100Mb
+spring.http.multipart.max-request-size=100Mb
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 logging.config=classpath:logback-spring.xml

+ 1 - 0
examcloud-core-print-starter/src/main/resources/security-exclusions.conf

@@ -6,6 +6,7 @@
 [/swagger-resources][/configuration/security][GET]
 [][${springfox.documentation.swagger.v2.path:/v2/api-docs}][GET]
 
+[${$rmp.ctrl.print}/upload][][POST]
 [${$rmp.ctrl.print}/upload][/upyun/info][POST]
 [${$rmp.ctrl.print}/printing/project][/list][POST]
 [${$rmp.ctrl.print}/printing/project][/{id}][POST]

+ 35 - 0
examcloud-core-print-starter/src/main/resources/static/example.html

@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="zh-cn">
+<head>
+    <meta name="renderer" content="webkit"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
+</head>
+<body>
+<form id="uploadForm" enctype="multipart/form-data">
+    <input type="file" name="file"/>
+    <input type="button" value="提交" onclick="doUpload()"/>
+</form>
+<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
+<script type="text/javascript">
+    function doUpload() {
+        var formData = new FormData($('#uploadForm')[0]);
+        formData.append('abc', '123');
+        $.ajax({
+            url: 'http://localhost:8089/api/ecs_prt/upload',
+            type: "POST",
+            data: formData,
+            headers: {
+                'key': 'U_S_109_53308',
+                'token': '9e3eb5be1d2a4a9e9ffab4341af7b987'
+            },
+            processData: false,
+            contentType: false,
+            success: function (data) {
+                console.log(data);
+            }
+        });
+    }
+</script>
+</body>
+</html>