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());
}