From 431dde90aa20f7652092fc0bfa9e6a1a28b06b9f Mon Sep 17 00:00:00 2001
From: jiangqs <343695869@qq.com>
Date: 星期日, 06 八月 2023 12:41:23 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/HongRuiTang

---
 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java |  122 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 118 insertions(+), 4 deletions(-)

diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
index 2a0bbcc..1015951 100644
--- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
+++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
@@ -1,15 +1,37 @@
 package com.ruoyi.file.controller;
 
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.file.FileUtils;
+import com.ruoyi.file.service.ISysFileService;
+import com.ruoyi.file.utils.OBSUploadUtils;
+import com.ruoyi.system.api.domain.poji.sys.SysFile;
+import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
+import com.wechat.pay.contrib.apache.httpclient.WechatPayUploadHttpPost;
+import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
+import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
+import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
+import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
+import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
 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.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.utils.file.FileUtils;
-import com.ruoyi.file.service.ISysFileService;
-import com.ruoyi.system.api.domain.poji.sys.SysFile;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URI;
+import java.security.PrivateKey;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 文件请求处理
@@ -20,6 +42,15 @@
 public class SysFileController
 {
     private static final Logger log = LoggerFactory.getLogger(SysFileController.class);
+
+    private final static String PRIVATE_KEY = "";
+
+    private final static String MCH_ID = "";
+
+    private final static String MCH_SERIAL_NO = "";
+
+    private final static String API_V3_KEY = "";
+
 
     @Autowired
     private ISysFileService sysFileService;
@@ -45,4 +76,87 @@
             return R.fail(e.getMessage());
         }
     }
+
+    /**
+     * 文件上传请求
+     */
+    @PostMapping("uploadOSS")
+    public R<String> uploadOSS(@RequestPart("file")MultipartFile file)
+    {
+        try
+        {
+            //
+            // 上传并返回访问地址
+            String url = OBSUploadUtils.uploadFile(file);
+            return R.ok(url);
+        }
+        catch (Exception e)
+        {
+            log.error("上传文件失败", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @PostMapping("batchUploadOSS")
+    public R<List<String>> batchUploadOSS(@RequestPart("file") MultipartFile[] files) {
+        List<String> urls = new ArrayList<>();
+        for (MultipartFile file : files) {
+            try {
+                // 上传并返回访问地址
+                String url = OBSUploadUtils.uploadFile(file);
+                urls.add(url);
+            } catch (Exception e) {
+                log.error("上传文件失败", e);
+                return R.fail(e.getMessage());
+            }
+        }
+        return R.ok(urls);
+    }
+
+
+
+    /**
+     * @description  创建httpClient
+     * @author  jqs
+     * @date    2023/6/19 12:50
+     * @param
+     * @return  CloseableHttpClient
+     */
+    private CloseableHttpClient createHttpClient() throws Exception {
+
+        String privateKey = PRIVATE_KEY;
+        String mchId = MCH_ID;
+        String mchSerialNo = MCH_SERIAL_NO;
+        String apiV3Key = API_V3_KEY;
+        // 加载商户私钥(privateKey:私钥字符串)
+        PrivateKey merchantPrivateKey = PemUtil
+                .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
+
+        // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
+        AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
+                new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));
+
+        // 初始化httpClient
+        CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create()
+                .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
+                .withValidator(new WechatPay2Validator(verifier)).build();
+        return httpClient;
+    }
+
+    @PostMapping("uploadWXFile")
+    public R<String> uploadWXFile(@RequestPart("file")MultipartFile file) throws Exception {
+        URI uri = new URI("https://api.mch.weixin.qq.com/v3/merchant/media/upload");
+        CloseableHttpClient httpClient = createHttpClient();
+        InputStream inputStream = file.getInputStream();
+        String sha256 = DigestUtils.sha256Hex(inputStream);
+        HttpPost request = new WechatPayUploadHttpPost.Builder(uri)
+                .withImage(file.getName(), sha256, inputStream)
+                .build();
+        CloseableHttpResponse response = httpClient.execute(request);
+        HttpEntity entity = response.getEntity();
+        String s = EntityUtils.toString(entity);
+        System.out.println(s);
+        return R.ok(s);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.7.1