Ver código fonte

fix 增加文件上传接口

Young 2 anos atrás
pai
commit
c811da4b1a

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

@@ -2,16 +2,10 @@ package cn.nosum.wx.cp.api;
 
 import cn.nosum.http.entity.DownloadResponse;
 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 java.io.File;
-
-import cn.nosum.wx.common.api.WxConsts;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
 /**
  * 媒体管理接口.
  *
@@ -28,8 +22,24 @@ public interface WxCpMediaService {
      * 接口url格式:https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
      * </pre>
      *
+     * @param url 文件地址
+     * @return 返回图片url
+     * @throws WxErrorException 企业微信接口调用异常
+     */
+    String uploadImg(String url) throws WxErrorException;
+
+    /**
+     * <pre>
+     * 上传图片.
+     * 上传图片得到图片URL,该URL永久有效
+     * 返回的图片URL,仅能用于图文消息(mpnews)正文中的图片展示;若用于非企业微信域名下的页面,图片将被屏蔽。
+     * 每个企业每天最多可上传100张图片
+     * 接口url格式:https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
+     * </pre>
+     *
      * @param uploadRequest 上传文件对象封装
      * @return 返回图片url
+     * @throws WxErrorException 企业微信接口调用异常
      */
     String uploadImg(UploadRequest uploadRequest) throws WxErrorException;
 
@@ -46,6 +56,8 @@ public interface WxCpMediaService {
      *
      * @param mediaType   媒体类型, 请看{@link WxConsts.MediaFileType}
      * @param inputStream 输入流,需要调用方控制关闭该输入流
+     * @return 文件上传返回
+     * @throws WxErrorException 企业微信接口调用异常
      */
     WxMediaUploadResult upload(String mediaType, UploadRequest inputStream) throws WxErrorException;
 
@@ -74,6 +86,7 @@ public interface WxCpMediaService {
      *
      * @param mediaId 媒体id
      * @return 保存到本地的临时文件
+     * @throws WxErrorException 企业微信接口调用异常
      */
     DownloadResponse getJsSdk(String mediaId) throws WxErrorException;
 

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

@@ -5,12 +5,18 @@ import cn.nosum.http.SimpleDownloadRequestExecutor;
 import cn.nosum.http.SimpleUploadRequestExecutor;
 import cn.nosum.http.entity.DownloadResponse;
 import cn.nosum.http.entity.UploadRequest;
+import cn.nosum.http.exception.HttpError;
+import cn.nosum.http.exception.HttpErrorException;
 import cn.nosum.wx.common.entity.result.WxMediaUploadResult;
 import cn.nosum.wx.common.error.WxErrorException;
 import cn.nosum.wx.cp.api.WxCpMediaService;
 import cn.nosum.wx.cp.api.WxCpService;
 import lombok.RequiredArgsConstructor;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
 import static cn.nosum.wx.cp.constant.WxCpApiPathConsts.Media.*;
 
 
@@ -25,33 +31,38 @@ public class WxCpMediaServiceImpl implements WxCpMediaService {
     private final WxCpService mainService;
 
     @Override
+    public String uploadImg(String url) throws WxErrorException {
+        try {
+            DownloadResponse execute = SimpleDownloadRequestExecutor.create(this.mainService.getRequestHttp()).execute(url, null);
+            UploadRequest uploadRequest = UploadRequest.builder().inputStream(new ByteArrayInputStream(((ByteArrayOutputStream) execute.getOutputStream()).toByteArray())).build();
+            return this.uploadImg(uploadRequest);
+        } catch (HttpErrorException e) {
+            throw new WxErrorException(e.getError());
+        } catch (IOException e) {
+            throw new WxErrorException(e.getMessage());
+        }
+    }
+
+    @Override
     public String uploadImg(UploadRequest request) throws WxErrorException {
         final String url = this.mainService.getWxCpConfigStorage().getApiUrl(IMG_UPLOAD);
-        return WxMediaUploadResult.fromJson(
-                this.mainService.execute(SimpleUploadRequestExecutor.create(this.mainService.getRequestHttp()), url, request)
-        ).getUrl();
+        return WxMediaUploadResult.fromJson(this.mainService.execute(SimpleUploadRequestExecutor.create(this.mainService.getRequestHttp()), url, request)).getUrl();
     }
 
     @Override
     public WxMediaUploadResult upload(String mediaType, UploadRequest request) throws WxErrorException {
         RequestExecutor<UploadRequest, String> executor = SimpleUploadRequestExecutor.create(this.mainService.getRequestHttp());
-        return WxMediaUploadResult.fromJson(
-                this.mainService.execute(executor, this.mainService.getWxCpConfigStorage().getApiUrl(MEDIA_UPLOAD + mediaType), request
-                ));
+        return WxMediaUploadResult.fromJson(this.mainService.execute(executor, this.mainService.getWxCpConfigStorage().getApiUrl(MEDIA_UPLOAD + mediaType), request));
     }
 
     @Override
     public DownloadResponse download(String mediaId) throws WxErrorException {
-        return this.mainService.execute(
-                SimpleDownloadRequestExecutor.create(this.mainService.getRequestHttp()),
-                this.mainService.getWxCpConfigStorage().getApiUrl(MEDIA_GET), "media_id=" + mediaId);
+        return this.mainService.execute(SimpleDownloadRequestExecutor.create(this.mainService.getRequestHttp()), this.mainService.getWxCpConfigStorage().getApiUrl(MEDIA_GET), "media_id=" + mediaId);
     }
 
     @Override
     public DownloadResponse 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);
+        return this.mainService.execute(SimpleDownloadRequestExecutor.create(this.mainService.getRequestHttp()), this.mainService.getWxCpConfigStorage().getApiUrl(JS_SDK_MEDIA_GET), "media_id=" + mediaId);
     }
 
 }