diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/Netty4HttpClient.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/Netty4HttpClient.java index 8407b263..f8995ad2 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/Netty4HttpClient.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/Netty4HttpClient.java @@ -107,11 +107,8 @@ public class Netty4HttpClient extends AbstractHttpClient { } } }; - InetSocketAddress address = new InetSocketAddress( + InetSocketAddress address = useProxy ? (InetSocketAddress) params.getProxy().address() : new InetSocketAddress( InetAddress.getByName(uri.getHost()), getPort(uri)); - if (useProxy) { - address = (InetSocketAddress) params.getProxy().address(); - } bootstrap.connect(address).syncUninterruptibly() .addListener(listener); response = future.get(); diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java index f8170f67..23c93cc1 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java @@ -1,7 +1,6 @@ package com.foxinmy.weixin4j.mp; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; @@ -168,9 +167,8 @@ public class WeixinProxy { * @return */ public TokenHolder getTicketHolder(TicketType ticketType) { - return new TokenHolder(new WeixinTicketCreator(this.appId, - ticketType, this.tokenHolder), - this.tokenHolder.getTokenStorager()); + return new TokenHolder(new WeixinTicketCreator(this.appId, ticketType, + this.tokenHolder), this.tokenHolder.getTokenStorager()); } /** @@ -381,7 +379,7 @@ public class WeixinProxy { /** * 获取永久媒体素材的总数
.图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000 * - * @return 总数对象 + * @return 总数对象 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.MediaCounter * @see 客服管理接口返回码 * @see 上传客服头像 */ - public JsonResult uploadAccountHeadimg(String id, File headimg) - throws WeixinException, IOException { - return customApi.uploadAccountHeadimg(id, headimg); + public JsonResult uploadAccountHeadimg(String accountId, InputStream is, + String fileName) throws WeixinException { + return customApi.uploadAccountHeadimg(accountId, is, fileName); } /** diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java index 2d5fca39..bbbfc9c3 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java @@ -1,8 +1,6 @@ package com.foxinmy.weixin4j.mp.api; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -11,8 +9,9 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.http.apache.ByteArrayBody; +import com.foxinmy.weixin4j.http.ContentType; import com.foxinmy.weixin4j.http.apache.FormBodyPart; +import com.foxinmy.weixin4j.http.apache.InputStreamBody; import com.foxinmy.weixin4j.http.weixin.JsonResult; import com.foxinmy.weixin4j.http.weixin.WeixinResponse; import com.foxinmy.weixin4j.model.Pageable; @@ -22,7 +21,8 @@ import com.foxinmy.weixin4j.mp.model.KfAccount; import com.foxinmy.weixin4j.mp.model.KfSession; import com.foxinmy.weixin4j.token.TokenHolder; import com.foxinmy.weixin4j.util.DigestUtil; -import com.foxinmy.weixin4j.util.IOUtil; +import com.foxinmy.weixin4j.util.FileUtil; +import com.foxinmy.weixin4j.util.ObjectId; import com.foxinmy.weixin4j.util.StringUtil; /** @@ -186,28 +186,33 @@ public class CustomApi extends MpApi { /** * 上传客服头像 * - * @param id + * @param accountId * 完整客服账号,格式为:账号前缀@公众号微信号 - * @param headimg + * @param is * 头像图片文件必须是jpg格式,推荐使用640*640大小的图片以达到最佳效果 + * @param fileName + * 文件名 为空时将自动生成 * @return 处理结果 * @throws WeixinException - * @throws IOException * @see 客服管理接口返回码 * @see 上传客服头像 */ - public JsonResult uploadAccountHeadimg(String id, File headimg) - throws WeixinException, IOException { + public JsonResult uploadAccountHeadimg(String accountId, InputStream is, + String fileName) throws WeixinException { + if (StringUtil.isBlank(fileName)) { + fileName = ObjectId.get().toHexString(); + } + if (StringUtil.isBlank(FileUtil.getFileExtension(fileName))) { + fileName = String.format("%s.jpg", fileName); + } Token token = tokenHolder.getToken(); String custom_uploadheadimg_uri = getRequestUri("custom_uploadheadimg_uri"); - byte[] bytes = IOUtil.toByteArray(new FileInputStream(headimg)); - WeixinResponse response = weixinExecutor.post( - String.format(custom_uploadheadimg_uri, token.getAccessToken(), - id), - new FormBodyPart("media", new ByteArrayBody(bytes, headimg - .getName()))); + WeixinResponse response = weixinExecutor.post(String.format( + custom_uploadheadimg_uri, token.getAccessToken(), accountId), + new FormBodyPart("media", new InputStreamBody(is, + ContentType.IMAGE_JPG.getMimeType(), fileName))); return response.getAsJsonResult(); } diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java index 4176207e..f90c8e14 100644 --- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java +++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java @@ -1,6 +1,7 @@ package com.foxinmy.weixin4j.mp.test; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.Calendar; import java.util.Date; @@ -74,7 +75,8 @@ public class CustomTest extends TokenTest { @Test public void uploadAccountHeadimg() throws WeixinException, IOException { JsonResult result = customApi.uploadAccountHeadimg( - "temp1@canyidianzhang", new File("/Users/jy/Music/简谱/风动草.jpg")); + "temp1@canyidianzhang", new FileInputStream(new File( + "/Users/jy/Music/简谱/风动草.jpg")), "风动草.jpg"); Assert.assertEquals(0, result.getCode()); }