From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-file/jnpf-file-yozo/jnpf-file-yozo-biz/src/main/java/jnpf/util/YozoUtils.java |  217 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 217 insertions(+), 0 deletions(-)

diff --git a/jnpf-file/jnpf-file-yozo/jnpf-file-yozo-biz/src/main/java/jnpf/util/YozoUtils.java b/jnpf-file/jnpf-file-yozo/jnpf-file-yozo-biz/src/main/java/jnpf/util/YozoUtils.java
new file mode 100644
index 0000000..943f0cc
--- /dev/null
+++ b/jnpf-file/jnpf-file-yozo/jnpf-file-yozo-biz/src/main/java/jnpf/util/YozoUtils.java
@@ -0,0 +1,217 @@
+package jnpf.util;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.Method;
+import jnpf.model.YozoParams;
+import jnpf.util.context.SpringContext;
+import jnpf.yozo.client.AppAuthenticator;
+import jnpf.yozo.client.UaaAppAuthenticator;
+import jnpf.yozo.constants.EnumResultCode;
+import jnpf.yozo.constants.UaaConstant;
+import jnpf.yozo.utils.DefaultResult;
+import jnpf.yozo.utils.IResult;
+import lombok.Cleanup;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鏂囦欢棰勮缂栬緫宸ュ叿绫�
+ *
+ * @author JNPF寮�鍙戝钩鍙扮粍
+ * @version V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙革紙https://www.jnpfsoft.com锛�
+ * @date 2021/5/13
+ */
+@Slf4j
+@Component
+public class YozoUtils {
+
+
+    private final YozoParams yozoParams = SpringContext.getBean(YozoParams.class);
+
+    /**
+     * 鐢熸垚绛惧悕
+     *
+     * @param appId
+     * @param secret
+     * @param params
+     * @return
+     */
+    public IResult<String> generateSign(String appId, String secret, Map<String, String[]> params) {
+        AppAuthenticator authenticator = new UaaAppAuthenticator(UaaConstant.SIGN, null, UaaConstant.APPID);
+        try {
+            String[] appIds = params.get(UaaConstant.APPID);
+            if (appIds == null || appIds.length != 1 || StringUtils.isEmpty(appIds[0])) {
+                params.put(UaaConstant.APPID, new String[]{appId});
+            }
+            String sign = authenticator.generateSign(secret, params);
+            return DefaultResult.successResult(sign);
+        } catch (Exception e) {
+            return DefaultResult.failResult(EnumResultCode.E_GENERATE_SIGN_FAIL.getInfo());
+        }
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢鍚�
+     *
+     * @param fileName
+     * @param templateType
+     * @return
+     */
+    public String getFileName(String fileName, String templateType) {
+        String suffix;
+        switch (templateType) {
+            case "1":
+                suffix = ".doc";
+                break;
+            case "2":
+                suffix = ".docx";
+                break;
+            case "3":
+                suffix = ".ppt";
+                break;
+            case "4":
+                suffix = ".pptx";
+                break;
+            case "5":
+                suffix = ".xls";
+                break;
+            case "6":
+                suffix = ".xlsx";
+                break;
+            default:
+                suffix = null;
+        }
+        if (suffix == null) {
+            return null;
+        }
+        return fileName + suffix;
+    }
+
+    /**
+     * 浣跨敤httpclint 鍙戦�佹枃浠�
+     *
+     * @param file 涓婁紶鐨勬枃浠�
+     * @author: qingfeng
+     * @date: 2019-05-27
+     */
+    public String uploadFile(String url, File file, String appId, String sign) {
+        String result = "";
+        //鏋勫缓HttpClient瀵硅薄
+        CloseableHttpResponse response = null;
+        //鏋勫缓POST璇锋眰
+        HttpPost httpPost = new HttpPost(url);
+        try {
+            @Cleanup CloseableHttpClient client = HttpClients.createDefault();
+            //鏋勫缓鏂囦欢浣�
+            String fileName = file.getName();
+            FileBody fileBody = new FileBody(file, ContentType.MULTIPART_FORM_DATA, fileName);
+            HttpEntity httpEntity = MultipartEntityBuilder
+                    .create()
+                    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
+                    .addPart("file", fileBody)
+                    .addTextBody("appId", appId)
+                    .addTextBody("sign", sign)
+                    .build();
+            httpPost.setEntity(httpEntity);
+            // 鎵цhttp璇锋眰
+            response = client.execute(httpPost);
+            result = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 涓嬭浇鏂囦欢鍒版寚瀹氱洰褰�
+     *
+     * @param fileUrl
+     * @param savePath
+     * @throws Exception
+     */
+    public void downloadFile(String fileUrl, String savePath) throws IOException {
+        File file = new File(XSSEscape.escapePath(savePath));
+        //鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤烘枃浠�
+        if (!file.exists()) {
+            boolean newFile = file.createNewFile();
+            if (newFile) {
+                log.info("鍒涘缓鎴愬姛");
+            } else {
+                log.info("鍒涘缓澶辫触");
+            }
+        }
+        HttpRequest request = HttpRequest.of(fileUrl).method(Method.GET);
+        request.setConnectionTimeout(6000);
+        request.setReadTimeout(6000);
+        try {
+            request.execute().body();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 涓婁紶鏂囦欢鍒版案涓�
+     *
+     * @param
+     * @return
+     */
+    public String uploadFileInPreview(InputStream inputStream, String fileName) throws IOException {
+        //鑾峰彇绛惧悕
+        Map<String, String[]> parameter = new HashMap<>();
+        parameter.put("appId", new String[]{yozoParams.getAppId()});
+        String sign = this.generateSign(yozoParams.getAppId(), yozoParams.getAppKey(), parameter).getData();
+        String url = "http://dmc.yozocloud.cn/api/file/upload?appId=" + yozoParams.getAppId() + "&sign=" + sign;
+
+
+        String result = "";
+        HttpEntity httpEntity = null;
+        HttpEntity responseEntity = null;
+        @Cleanup CloseableHttpClient httpClient = HttpClients.createDefault();
+        try {
+
+            HttpPost httpPost = new HttpPost(url);
+            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
+            multipartEntityBuilder.setCharset(StandardCharsets.UTF_8);
+            multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//鍔犱笂姝よ浠g爜瑙e喅杩斿洖涓枃涔辩爜闂
+            multipartEntityBuilder.addBinaryBody("file", inputStream, ContentType.MULTIPART_FORM_DATA, fileName);
+
+            httpEntity = multipartEntityBuilder.build();
+            httpPost.setEntity(httpEntity);
+            CloseableHttpResponse response = httpClient.execute(httpPost);
+            responseEntity = response.getEntity();
+            result = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
+
+
+        } catch (Exception e) {
+
+            e.printStackTrace();
+        } finally {
+            httpClient.close();
+            if (inputStream != null) {
+                inputStream.close();
+            }
+
+        }
+        return result;
+    }
+}

--
Gitblit v1.8.0