dcs vor 2 Tagen
Ursprung
Commit
711b817d6e

+ 9 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/workark/controller/DifyController.java

@@ -191,6 +191,15 @@ public class DifyController {
         return Response.ok();
     }
 
+    @ApiOperation("上传文件")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "difyTypeId", value = "dify类型id")
+    })
+    @RequestMapping(value = "/chat/upload/{difyTypeId}", method = RequestMethod.POST)
+    public Response upload(@ApiParam(name = "file", required = true)  MultipartFile file, @PathVariable long difyTypeId) {
+        return Response.ok(difyService.upload(file, difyTypeId));
+    }
+
     @Autowired
     DifyDatasetService difyDatasetService;
 

+ 63 - 8
virgo.api/src/main/java/com/bosshand/virgo/api/workark/service/DifyService.java

@@ -1,5 +1,8 @@
 package com.bosshand.virgo.api.workark.service;
 
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.bosshand.virgo.api.workark.dao.*;
@@ -30,12 +33,11 @@ import io.github.imfangs.dify.client.model.workflow.WorkflowRunRequest;
 import io.github.imfangs.dify.client.model.workflow.WorkflowRunStatusResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 @Service
 public class DifyService {
@@ -370,8 +372,14 @@ public class DifyService {
                 FileInfo info = new FileInfo();
                 String type = jsonObject.getString("type");
                 String transfer_method = jsonObject.getString("transfer_method");
-                String url = jsonObject.getString("url");
-                info.setUrl(url);
+                if(jsonObject.containsKey("url")){
+                    String url = jsonObject.getString("url");
+                    info.setUrl(url);
+                }
+                if(jsonObject.containsKey("upload_file_id")){
+                    String upload_file_id = jsonObject.getString("upload_file_id");
+                    info.setUploadFileId(upload_file_id);
+                }
                 for (FileType fileType : FileType.values()) {
                     if(fileType.getValue().equals(type)){
                         info.setType(fileType);
@@ -524,8 +532,14 @@ public class DifyService {
                 FileInfo info = new FileInfo();
                 String type = jsonObject.getString("type");
                 String transfer_method = jsonObject.getString("transfer_method");
-                String url = jsonObject.getString("url");
-                info.setUrl(url);
+                if(jsonObject.containsKey("url")){
+                    String url = jsonObject.getString("url");
+                    info.setUrl(url);
+                }
+                if(jsonObject.containsKey("upload_file_id")){
+                    String upload_file_id = jsonObject.getString("upload_file_id");
+                    info.setUploadFileId(upload_file_id);
+                }
                 for (FileType fileType : FileType.values()) {
                     if(fileType.getValue().equals(type)){
                         info.setType(fileType);
@@ -713,4 +727,45 @@ public class DifyService {
 
     }
 
+    /**
+     * 上传文件
+     */
+    public Map upload(MultipartFile file, long difyTypeId) {
+
+        DifyType difyType = difyTypeDao.get(difyTypeId);
+
+        UserContext userContext = ContextUtils.getUserContext();
+        File toFile = transferToFile(file);
+        Map data = new HashMap();
+        data.put("file", toFile);
+        data.put("user", userContext.getUserName() + "-" + userContext.getUserId());
+        String body = HttpRequest.post("http://203.110.233.149:9000/v1/files/upload")
+                .header("Authorization", "Bearer "+ difyType.getApiKey())
+                .form(data)
+                .contentType("multipart/form-data")
+                .execute()
+                .body();
+        Map result = new HashMap();
+        if (StrUtil.isNotBlank(body)) {
+            result = JSON.parseObject(body, Map.class);
+        }
+        return result;
+    }
+
+    private File transferToFile(MultipartFile multipartFile) {
+        File file = null;
+        try {
+            String originalFilename = multipartFile.getOriginalFilename();
+            //获取文件后缀
+            String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
+            file = File.createTempFile(originalFilename, prefix);
+            multipartFile.transferTo(file);
+            //删除
+            file.deleteOnExit();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return file;
+    }
+
 }

+ 3 - 3
virgo.api/src/main/java/com/bosshand/virgo/api/workark/util/OkHttpUtils.java

@@ -36,9 +36,9 @@ public class OkHttpUtils {
                 if (okHttpClient == null) {
                     TrustManager[] trustManagers = buildTrustManagers();
                     okHttpClient = new OkHttpClient.Builder()
-                            .connectTimeout(150, TimeUnit.SECONDS)
-                            .writeTimeout(200, TimeUnit.SECONDS)
-                            .readTimeout(200, TimeUnit.SECONDS)
+                            .connectTimeout(400, TimeUnit.SECONDS)
+                            .writeTimeout(400, TimeUnit.SECONDS)
+                            .readTimeout(400, TimeUnit.SECONDS)
                             .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])
                             .hostnameVerifier((hostName, session) -> true)
                             .retryOnConnectionFailure(true)