From cd72fbfaf658e81d2e2552fa1dda415294d3bac8 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 23 Sep 2018 18:42:34 +0800 Subject: [PATCH] =?UTF-8?q?#708=20=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=9B=BE=E7=89=87=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/result/WxMediaUploadResult.java | 1 + .../util/json/WxMediaUploadResultAdapter.java | 35 +++++++++------ .../weixin/cp/api/WxCpMediaService.java | 24 ++++++++-- .../cp/api/impl/WxCpMediaServiceImpl.java | 24 ++++++---- .../cp/api/impl/WxCpMediaServiceImplTest.java | 31 ++++++++----- .../weixin/mp/api/WxMpMaterialService.java | 16 +++++-- .../mp/api/impl/WxMpMaterialServiceImpl.java | 44 ++++++++++++------- 7 files changed, 117 insertions(+), 58 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMediaUploadResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMediaUploadResult.java index 49e680fab..d6ffd50c5 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMediaUploadResult.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMediaUploadResult.java @@ -16,6 +16,7 @@ import me.chanjar.weixin.common.util.json.WxGsonBuilder; public class WxMediaUploadResult implements Serializable { private static final long serialVersionUID = 330834334738622341L; + private String url; private String type; private String mediaId; private String thumbMediaId; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMediaUploadResultAdapter.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMediaUploadResultAdapter.java index f33e90d5a..3cb32c5ed 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMediaUploadResultAdapter.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxMediaUploadResultAdapter.java @@ -1,10 +1,14 @@ package me.chanjar.weixin.common.util.json; -import com.google.gson.*; -import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; - import java.lang.reflect.Type; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; + /** * @author Daniel Qian */ @@ -12,22 +16,25 @@ public class WxMediaUploadResultAdapter implements JsonDeserializer - * 媒体管理接口 + * 媒体管理接口. * Created by BinaryWang on 2017/6/24. * * * @author Binary Wang */ public interface WxCpMediaService { + String MEDIA_GET_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/get"; + String MEDIA_UPLOAD_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?type="; + String IMG_UPLOAD_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg"; /** *
-   * 上传多媒体文件
+   * 上传多媒体文件.
    * 上传的多媒体文件有格式和大小限制,如下:
    *   图片(image): 1M,支持JPG格式
    *   语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
@@ -36,6 +39,8 @@ public interface WxCpMediaService {
     throws WxErrorException, IOException;
 
   /**
+   * 上传多媒体文件.
+   *
    * @param mediaType 媒体类型
    * @param file      文件对象
    * @see #upload(String, String, InputStream)
@@ -44,7 +49,7 @@ public interface WxCpMediaService {
 
   /**
    * 
-   * 下载多媒体文件
+   * 下载多媒体文件.
    * 根据微信文档,视频文件下载不了,会返回null
    * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件
    * 
@@ -54,4 +59,17 @@ public interface WxCpMediaService { */ File download(String mediaId) throws WxErrorException; + /** + *
+   * 上传图片.
+   * 上传图片得到图片URL,该URL永久有效
+   * 返回的图片URL,仅能用于图文消息(mpnews)正文中的图片展示;若用于非企业微信域名下的页面,图片将被屏蔽。
+   * 每个企业每天最多可上传100张图片
+   * 接口url格式:https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
+   * 
+ * + * @param file 上传的文件对象 + * @return 返回图片url + */ + String uploadImg(File file) throws WxErrorException; } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java index f1cf272fe..79972d381 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java @@ -1,5 +1,10 @@ package me.chanjar.weixin.cp.api.impl; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.fs.FileUtils; @@ -8,11 +13,6 @@ import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; import me.chanjar.weixin.cp.api.WxCpMediaService; import me.chanjar.weixin.cp.api.WxCpService; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.UUID; - /** *
  * 媒体管理接口
@@ -35,16 +35,22 @@ public class WxCpMediaServiceImpl implements WxCpMediaService {
 
   @Override
   public WxMediaUploadResult upload(String mediaType, File file) throws WxErrorException {
-    String url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?type=" + mediaType;
-    return this.mainService.execute(MediaUploadRequestExecutor.create(this.mainService.getRequestHttp()), url, file);
+    return this.mainService.execute(MediaUploadRequestExecutor.create(this.mainService.getRequestHttp()),
+      MEDIA_UPLOAD_URL + mediaType, file);
   }
 
   @Override
   public File download(String mediaId) throws WxErrorException {
-    String url = "https://qyapi.weixin.qq.com/cgi-bin/media/get";
     return this.mainService.execute(
       BaseMediaDownloadRequestExecutor.create(this.mainService.getRequestHttp(),
         this.mainService.getWxCpConfigStorage().getTmpDirFile()),
-      url, "media_id=" + mediaId);
+      MEDIA_GET_URL, "media_id=" + mediaId);
+  }
+
+  @Override
+  public String uploadImg(File file) throws WxErrorException {
+    final WxMediaUploadResult result = this.mainService
+      .execute(MediaUploadRequestExecutor.create(this.mainService.getRequestHttp()), IMG_UPLOAD_URL, file);
+    return result.getUrl();
   }
 }
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
index ad925690b..d7242a770 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
@@ -1,5 +1,14 @@
 package me.chanjar.weixin.cp.api.impl;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.testng.annotations.*;
+
 import com.google.inject.Inject;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
@@ -7,22 +16,14 @@ import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.api.ApiTestModule;
 import me.chanjar.weixin.cp.api.TestConstants;
 import me.chanjar.weixin.cp.api.WxCpService;
-import org.testng.annotations.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.testng.Assert.*;
 
 /**
- * 
- *
  * Created by Binary Wang on 2017-6-25.
+ *
  * @author Binary Wang
- * 
*/ @Guice(modules = ApiTestModule.class) public class WxCpMediaServiceImplTest { @@ -35,8 +36,8 @@ public class WxCpMediaServiceImplTest { public Object[][] mediaData() { return new Object[][]{ new Object[]{WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, "mm.jpeg"}, - new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_MP3, "mm.mp3"}, - new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_AMR, "mm.amr"},//{"errcode":301017,"errmsg":"voice file only support amr like myvoice.amr"} + new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_MP3, "mm.mp3"},//{"errcode":301017,"errmsg":"voice file only support amr like myvoice.amr"} + new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_AMR, "mm.amr"}, new Object[]{WxConsts.MediaFileType.VIDEO, TestConstants.FILE_MP4, "mm.mp4"}, new Object[]{WxConsts.MediaFileType.FILE, TestConstants.FILE_JPG, "mm.jpeg"} }; @@ -75,4 +76,10 @@ public class WxCpMediaServiceImplTest { System.out.println(file); } + @Test + public void testUploadImg() throws WxErrorException { + URL url = ClassLoader.getSystemResource("mm.jpeg"); + String res = this.wxService.getMediaService().uploadImg(new File(url.getFile())); + assertThat(res).isNotEmpty(); + } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java index 50490dbbf..6d762f1c4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java @@ -1,12 +1,20 @@ package me.chanjar.weixin.mp.api; -import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.mp.bean.material.*; - import java.io.File; import java.io.InputStream; +import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.bean.material.WxMediaImgUploadResult; +import me.chanjar.weixin.mp.bean.material.WxMpMaterial; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialArticleUpdate; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialCountResult; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialFileBatchGetResult; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult; +import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult; + /** *
  * Created by Binary Wang on 2016/7/21.
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
index 5c539b5b6..7929aced0 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java
@@ -1,21 +1,5 @@
 package me.chanjar.weixin.mp.api.impl;
 
-import me.chanjar.weixin.common.WxType;
-import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.common.util.fs.FileUtils;
-import me.chanjar.weixin.common.util.http.BaseMediaDownloadRequestExecutor;
-import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
-import me.chanjar.weixin.common.util.json.WxGsonBuilder;
-import me.chanjar.weixin.mp.api.WxMpMaterialService;
-import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.bean.material.*;
-import me.chanjar.weixin.mp.util.requestexecuter.material.*;
-import me.chanjar.weixin.mp.util.requestexecuter.media.MediaImgUploadRequestExecutor;
-import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -23,6 +7,34 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import me.chanjar.weixin.common.WxType;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.common.util.fs.FileUtils;
+import me.chanjar.weixin.common.util.http.BaseMediaDownloadRequestExecutor;
+import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+import me.chanjar.weixin.mp.api.WxMpMaterialService;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.material.WxMediaImgUploadResult;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterial;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialArticleUpdate;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialCountResult;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialFileBatchGetResult;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult;
+import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialDeleteRequestExecutor;
+import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialNewsInfoRequestExecutor;
+import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialUploadRequestExecutor;
+import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialVideoInfoRequestExecutor;
+import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialVoiceAndImageDownloadRequestExecutor;
+import me.chanjar.weixin.mp.util.requestexecuter.media.MediaImgUploadRequestExecutor;
+
 /**
  * Created by Binary Wang on 2016/7/21.
  */