소스 검색

fix 修改 wx-java-cp,添加文件上传下载

Young 2 년 전
부모
커밋
968bd98d6a

+ 20 - 1
support-demo/src/main/java/cn/nosum/wx/cp/controller/MessageController.java

@@ -1,5 +1,9 @@
 package cn.nosum.wx.cp.controller;
 
+import cn.nosum.http.entity.UploadRequest;
+import cn.nosum.wx.common.api.WxConsts;
+import cn.nosum.wx.common.entity.result.WxMediaUploadResult;
+import cn.nosum.wx.common.error.WxErrorException;
 import cn.nosum.wx.cp.api.WxCpMessageService;
 import cn.nosum.wx.cp.config.WxCpConfiguration;
 import cn.nosum.wx.cp.entity.message.WxCpMessage;
@@ -7,7 +11,9 @@ import cn.nosum.wx.cp.entity.message.WxCpMessageSendResult;
 import lombok.SneakyThrows;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.*;
 import java.time.LocalDateTime;
 
 /**
@@ -19,7 +25,6 @@ import java.time.LocalDateTime;
 @RequestMapping("/wx/message")
 public class MessageController {
 
-    @SneakyThrows
     @RequestMapping("/test")
     public WxCpMessageSendResult sendText(Integer appId){
         WxCpMessageService messageService = WxCpConfiguration.getCpService(appId).getMessageService();
@@ -29,4 +34,18 @@ public class MessageController {
                 .build().atAll();
         return messageService.send(wxCpMessage);
     }
+
+    @SneakyThrows
+    @RequestMapping("/upload")
+    public WxMediaUploadResult upload(MultipartFile file,Integer appId){
+        UploadRequest request = UploadRequest.builder().inputStream(file.getInputStream()).fileName(file.getOriginalFilename()).build();
+        return WxCpConfiguration.getCpService(appId).getMediaService().upload(WxConsts.MediaFileType.IMAGE, request);
+    }
+
+    @RequestMapping("/download")
+    public void download(Integer appId,String mediaId) throws WxErrorException, FileNotFoundException {
+        OutputStream download = WxCpConfiguration.getCpService(appId).getMediaService().download(mediaId);
+        File src = new File("/Users/huanghuijie/Downloads/Snipaste_2021-08-30_22-59-43.png");
+        FileOutputStream fileOutputStream = new FileOutputStream(src);
+    }
 }

+ 4 - 0
support-http/src/main/java/cn/nosum/http/SimpleUploadRequestExecutor.java

@@ -12,6 +12,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Objects;
+import java.util.UUID;
 
 /**
  * 文件上传请求执行器
@@ -39,6 +40,9 @@ public abstract class SimpleUploadRequestExecutor<H, P, R> extends SimpleRequest
         if (StringUtils.isBlank(uploadRequest.getName())) {
             uploadRequest.setName("media");
         }
+        if (StringUtils.isBlank(uploadRequest.getFileName())){
+            uploadRequest.setFileName(UUID.randomUUID().toString().replaceAll("-",""));
+        }
         return handler.handle(doExecute(uri, uploadRequest));
     }
 

+ 4 - 1
support-http/src/main/java/cn/nosum/http/apache/ApacheSimpleUploadRequestExecutor.java

@@ -5,16 +5,19 @@ import cn.nosum.http.ResponseHandler;
 import cn.nosum.http.SimpleUploadRequestExecutor;
 import cn.nosum.http.entity.UploadRequest;
 import cn.nosum.http.exception.HttpErrorException;
+import org.apache.commons.lang3.RandomUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpHost;
 import org.apache.http.client.config.RequestConfig;
 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.impl.client.CloseableHttpClient;
 
 import java.io.IOException;
+import java.util.UUID;
 
 
 /**
@@ -41,7 +44,7 @@ public class ApacheSimpleUploadRequestExecutor extends SimpleUploadRequestExecut
         }
         HttpEntity entity = MultipartEntityBuilder
                 .create()
-                .addBinaryBody(uploadRequest.getName(), uploadRequest.getInputStream())
+                .addBinaryBody(uploadRequest.getName(), uploadRequest.getInputStream(), ContentType.DEFAULT_BINARY, uploadRequest.getName())
                 .setMode(HttpMultipartMode.RFC6532)
                 .build();
         httpPost.setEntity(entity);

+ 5 - 0
support-http/src/main/java/cn/nosum/http/entity/UploadRequest.java

@@ -25,4 +25,9 @@ public class UploadRequest implements Serializable {
      * 参数名称
      */
     private String name;
+
+    /**
+     * 文件名称
+     */
+    private String fileName;
 }

+ 2 - 2
wx-java-tools/wx-java-cp/src/main/java/cn/nosum/wx/cp/api/WxCpMediaService.java

@@ -43,7 +43,7 @@ public interface WxCpMediaService {
      * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件
      * </pre>
      *
-     * @param mediaType   媒体类型, 请看{@link WxConsts}
+     * @param mediaType   媒体类型, 请看{@link WxConsts.MediaFileType}
      * @param inputStream 输入流,需要调用方控制关闭该输入流
      */
     WxMediaUploadResult upload(String mediaType, UploadRequest inputStream) throws WxErrorException;
@@ -74,7 +74,7 @@ public interface WxCpMediaService {
      * @param mediaId 媒体id
      * @return 保存到本地的临时文件
      */
-    OutputStream getJssdkFile(String mediaId) throws WxErrorException;
+    OutputStream getJsSdk(String mediaId) throws WxErrorException;
 
 
 }

+ 1 - 1
wx-java-tools/wx-java-cp/src/main/java/cn/nosum/wx/cp/api/impl/BaseWxCpServiceImpl.java

@@ -47,7 +47,7 @@ public abstract class BaseWxCpServiceImpl<H, P> implements WxCpService, RequestH
     private WxCpUserService userService = null;
     private WxCpChatService chatService = null;
     private WxCpDepartmentService departmentService = null;
-    private WxCpMediaService mediaService = null;
+    private WxCpMediaService mediaService = new WxCpMediaServiceImpl(this);
     private WxCpMenuService menuService = null;
     private WxCpOAuth2Service oauth2Service = null;
     private WxCpTagService tagService = null;

+ 1 - 1
wx-java-tools/wx-java-cp/src/main/java/cn/nosum/wx/cp/api/impl/WxCpMediaServiceImpl.java

@@ -49,7 +49,7 @@ public class WxCpMediaServiceImpl implements WxCpMediaService {
     }
 
     @Override
-    public OutputStream getJssdkFile(String mediaId) throws WxErrorException {
+    public OutputStream getJsSdk(String mediaId) throws WxErrorException {
         return this.mainService.execute(
                 SimpleDownloadRequestExecutor.create(this.mainService.getRequestHttp()),
                 this.mainService.getWxCpConfigStorage().getApiUrl(JS_SDK_MEDIA_GET), "media_id=" + mediaId);