From 51527a6e817a6ba73b29b07e94a7e879a86f8eaf Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 06 三月 2024 16:29:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 167 insertions(+), 8 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 4f7bfa8..1008e47 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,28 +1,65 @@
package com.ruoyi.file.controller;
-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.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.file.utils.OBSUploadUtils;
+import com.ruoyi.system.api.domain.poji.config.FileRecord;
import com.ruoyi.system.api.domain.poji.sys.SysFile;
+import com.ruoyi.system.api.service.RemoteConfigService;
+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.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 javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URI;
+import java.security.PrivateKey;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
/**
* 文件请求处理
*
- * @author ruoyi
+ * @author jqs
*/
@RestController
public class SysFileController
{
private static final Logger log = LoggerFactory.getLogger(SysFileController.class);
- @Autowired
+ private final static String PRIVATE_KEY = "";
+
+ private final static String MCH_ID = "1631381314";
+
+ private final static String MCH_SERIAL_NO = "";
+
+ private final static String API_V3_KEY = "J8v9JDHKJYDHW9bdk30o2bdjy6z9mn1A";
+
+
+ @Resource
private ISysFileService sysFileService;
+
+ @Resource
+ private RemoteConfigService remoteConfigService;
/**
* 文件上传请求
@@ -33,10 +70,22 @@
try
{
// 上传并返回访问地址
+ String fileName = file.getOriginalFilename();
+ String prefix = fileName.substring(fileName.lastIndexOf("."));
+ long fileSize = file.getSize();
String url = sysFileService.uploadFile(file);
SysFile sysFile = new SysFile();
sysFile.setName(FileUtils.getName(url));
sysFile.setUrl(url);
+ //创建上传记录
+ FileRecord fileRecord = new FileRecord();
+ fileRecord.setFileName(fileName);
+ fileRecord.setFilePath(url);
+ fileRecord.setUploadType(2);
+ fileRecord.setUploadTime(new Date());
+ fileRecord.setFileSize(fileSize);
+ fileRecord.setFileType(prefix);
+ remoteConfigService.createFileRecord(fileRecord);
return R.ok(sysFile);
}
catch (Exception e)
@@ -45,4 +94,114 @@
return R.fail(e.getMessage());
}
}
+
+ /**
+ * 文件上传请求
+ */
+ @PostMapping("uploadOSS")
+ public R<String> uploadOSS(@RequestPart("file")MultipartFile file)
+ {
+ try
+ {
+ // 上传并返回访问地址
+ String fileName = file.getOriginalFilename();
+ String prefix = fileName.substring(fileName.lastIndexOf("."));
+ long fileSize = file.getSize();
+ String url = OBSUploadUtils.uploadFile(file);
+ //创建上传记录
+ FileRecord fileRecord = new FileRecord();
+ fileRecord.setFileName(fileName);
+ fileRecord.setFilePath(url);
+ fileRecord.setUploadType(2);
+ fileRecord.setUploadTime(new Date());
+ fileRecord.setFileSize(fileSize);
+ fileRecord.setFileType(prefix);
+ remoteConfigService.createFileRecord(fileRecord);
+ 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<>();
+ String fileName;
+ String prefix;
+ long fileSize;
+ FileRecord fileRecord;
+ for (MultipartFile file : files) {
+ try {
+ fileName = file.getOriginalFilename();
+ prefix = fileName.substring(fileName.lastIndexOf("."));
+ fileSize = file.getSize();
+ // 上传并返回访问地址
+ String url = OBSUploadUtils.uploadFile(file);
+ urls.add(url);
+ //创建上传记录
+ fileRecord = new FileRecord();
+ fileRecord.setFileName(fileName);
+ fileRecord.setFilePath(url);
+ fileRecord.setUploadType(2);
+ fileRecord.setUploadTime(new Date());
+ fileRecord.setFileSize(fileSize);
+ fileRecord.setFileType(prefix);
+ remoteConfigService.createFileRecord(fileRecord);
+ } 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