Skip to content

Commit afeabff

Browse files
committed
binarywang#269 修复okhttp实现素材上传时的问题
1 parent 4c7ce17 commit afeabff

3 files changed

Lines changed: 33 additions & 26 deletions

File tree

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ public Request authenticate(Route route, Response response) throws IOException {
3939
//得到httpClient
4040
OkHttpClient client = clientBuilder.build();
4141

42-
RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
43-
RequestBody body = new MultipartBody.Builder().addFormDataPart("media", null, fileBody).build();
42+
RequestBody body = new MultipartBody.Builder()
43+
.setType(MediaType.parse("multipart/form-data"))
44+
.addFormDataPart("media",
45+
file.getName(),
46+
RequestBody.create(MediaType.parse("application/octet-stream"), file))
47+
.build();
4448
Request request = new Request.Builder().url(uri).post(body).build();
4549

4650
Response response = client.newCall(request).execute();

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ public OkhttpMaterialUploadRequestExecutor(RequestHttp requestHttp) {
2525

2626
@Override
2727
public WxMpMaterialUploadResult execute(String uri, WxMpMaterial material) throws WxErrorException, IOException {
28+
if (material == null) {
29+
throw new WxErrorException(WxError.newBuilder().setErrorMsg("非法请求,material参数为空").build());
30+
}
31+
File file = material.getFile();
32+
if (file == null || !file.exists()) {
33+
throw new FileNotFoundException();
34+
}
35+
2836
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
2937
//设置代理
3038
if (requestHttp.getRequestHttpProxy() != null) {
@@ -40,27 +48,19 @@ public Request authenticate(Route route, Response response) throws IOException {
4048
.build();
4149
}
4250
});
43-
//得到httpClient
44-
OkHttpClient client = clientBuilder.build();
4551

46-
47-
if (material == null) {
48-
throw new WxErrorException(WxError.newBuilder().setErrorMsg("非法请求,material参数为空").build());
49-
}
50-
51-
File file = material.getFile();
52-
if (file == null || !file.exists()) {
53-
throw new FileNotFoundException();
54-
}
55-
RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
56-
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder().addFormDataPart("media", null, fileBody);
52+
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder()
53+
.setType(MediaType.parse("multipart/form-data"))
54+
.addFormDataPart("media",
55+
file.getName(),
56+
RequestBody.create(MediaType.parse("application/octet-stream"), file));
5757
Map<String, String> form = material.getForm();
58-
if (material.getForm() != null) {
58+
if (form != null) {
5959
bodyBuilder.addFormDataPart("description", WxGsonBuilder.create().toJson(form));
6060
}
61-
RequestBody body = bodyBuilder.build();
62-
Request request = new Request.Builder().url(uri).post(body).build();
63-
Response response = client.newCall(request).execute();
61+
62+
Request request = new Request.Builder().url(uri).post(bodyBuilder.build()).build();
63+
Response response = clientBuilder.build().newCall(request).execute();
6464
String responseContent = response.body().string();
6565
WxError error = WxError.fromJson(responseContent);
6666
if (error.getErrorCode() != 0) {
@@ -69,4 +69,5 @@ public Request authenticate(Route route, Response response) throws IOException {
6969
return WxMpMaterialUploadResult.fromJson(responseContent);
7070
}
7171
}
72+
7273
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public OkhttpMediaImgUploadRequestExecutor(RequestHttp requestHttp) {
2121
}
2222

2323
@Override
24-
public WxMediaImgUploadResult execute(String uri, File data) throws WxErrorException, IOException {
24+
public WxMediaImgUploadResult execute(String uri, File file) throws WxErrorException, IOException {
2525
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
2626
//设置代理
2727
if (requestHttp.getRequestHttpProxy() != null) {
@@ -37,14 +37,16 @@ public Request authenticate(Route route, Response response) throws IOException {
3737
.build();
3838
}
3939
});
40-
//得到httpClient
41-
OkHttpClient client = clientBuilder.build();
4240

43-
RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), data);
44-
RequestBody body = new MultipartBody.Builder().addFormDataPart("media", null, fileBody).build();
45-
Request request = new Request.Builder().url(uri).post(body).build();
41+
RequestBody body = new MultipartBody.Builder()
42+
.setType(MediaType.parse("multipart/form-data"))
43+
.addFormDataPart("media",
44+
file.getName(),
45+
RequestBody.create(MediaType.parse("application/octet-stream"), file))
46+
.build();
4647

47-
Response response = client.newCall(request).execute();
48+
Request request = new Request.Builder().url(uri).post(body).build();
49+
Response response = clientBuilder.build().newCall(request).execute();
4850
String responseContent = response.body().string();
4951
WxError error = WxError.fromJson(responseContent);
5052
if (error.getErrorCode() != 0) {

0 commit comments

Comments
 (0)