Skip to content

Commit e6a3e6e

Browse files
authored
🆕 #1866 【小程序】 增加提审素材上传接口请求执行器
1 parent b4da5c9 commit e6a3e6e

File tree

5 files changed

+231
-0
lines changed

5 files changed

+231
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package me.chanjar.weixin.common.bean.result;
2+
3+
import java.io.Serializable;
4+
5+
import lombok.Data;
6+
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
7+
8+
/**
9+
* 小程序 提审素材上传接口
10+
*
11+
* @author yangyh22
12+
* @since 2020/11/14
13+
*/
14+
@Data
15+
public class WxAuditMediaUploadResult implements Serializable {
16+
17+
private static final long serialVersionUID = 1L;
18+
19+
private String type;
20+
private String mediaid;
21+
22+
public static WxAuditMediaUploadResult fromJson(String json) {
23+
return WxGsonBuilder.create().fromJson(json, WxAuditMediaUploadResult.class);
24+
}
25+
26+
@Override
27+
public String toString() {
28+
return WxGsonBuilder.create().toJson(this);
29+
}
30+
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package me.chanjar.weixin.common.util.http;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import me.chanjar.weixin.common.bean.result.WxAuditMediaUploadResult;
7+
import me.chanjar.weixin.common.enums.WxType;
8+
import me.chanjar.weixin.common.error.WxErrorException;
9+
import me.chanjar.weixin.common.util.http.apache.ApacheAuditMediaUploadRequestExecutor;
10+
import me.chanjar.weixin.common.util.http.jodd.JoddHttpAuditMediaUploadRequestExecutor;
11+
import me.chanjar.weixin.common.util.http.okhttp.OkHttpAuditMediaUploadRequestExecutor;
12+
13+
/**
14+
* 小程序 提审素材上传接口
15+
* 上传媒体文件请求执行器.
16+
* 请求的参数是File, 返回的结果是String
17+
*
18+
* @author yangyh22
19+
* @since 2020/11/14
20+
*/
21+
public abstract class AuditMediaUploadRequestExecutor<H, P> implements RequestExecutor<WxAuditMediaUploadResult, File> {
22+
23+
protected RequestHttp<H, P> requestHttp;
24+
25+
public AuditMediaUploadRequestExecutor(RequestHttp requestHttp) {
26+
this.requestHttp = requestHttp;
27+
}
28+
29+
@Override
30+
public void execute(String uri, File data, ResponseHandler<WxAuditMediaUploadResult> handler, WxType wxType) throws WxErrorException, IOException {
31+
handler.handle(this.execute(uri, data, wxType));
32+
}
33+
34+
public static RequestExecutor<WxAuditMediaUploadResult, File> create(RequestHttp requestHttp) {
35+
switch (requestHttp.getRequestType()) {
36+
case APACHE_HTTP:
37+
return new ApacheAuditMediaUploadRequestExecutor(requestHttp);
38+
case JODD_HTTP:
39+
return new JoddHttpAuditMediaUploadRequestExecutor(requestHttp);
40+
case OK_HTTP:
41+
return new OkHttpAuditMediaUploadRequestExecutor(requestHttp);
42+
default:
43+
return null;
44+
}
45+
}
46+
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package me.chanjar.weixin.common.util.http.apache;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import me.chanjar.weixin.common.bean.result.WxAuditMediaUploadResult;
7+
import me.chanjar.weixin.common.enums.WxType;
8+
import me.chanjar.weixin.common.error.WxError;
9+
import me.chanjar.weixin.common.error.WxErrorException;
10+
import me.chanjar.weixin.common.util.http.AuditMediaUploadRequestExecutor;
11+
import me.chanjar.weixin.common.util.http.RequestHttp;
12+
13+
import org.apache.http.HttpEntity;
14+
import org.apache.http.HttpHost;
15+
import org.apache.http.client.config.RequestConfig;
16+
import org.apache.http.client.methods.CloseableHttpResponse;
17+
import org.apache.http.client.methods.HttpPost;
18+
import org.apache.http.entity.mime.HttpMultipartMode;
19+
import org.apache.http.entity.mime.MultipartEntityBuilder;
20+
import org.apache.http.impl.client.CloseableHttpClient;
21+
22+
/**
23+
* @author yangyh22
24+
* @since 2020/11/14
25+
*/
26+
public class ApacheAuditMediaUploadRequestExecutor extends AuditMediaUploadRequestExecutor<CloseableHttpClient, HttpHost> {
27+
28+
public ApacheAuditMediaUploadRequestExecutor(RequestHttp requestHttp) {
29+
super(requestHttp);
30+
}
31+
32+
@Override
33+
public WxAuditMediaUploadResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
34+
HttpPost httpPost = new HttpPost(uri);
35+
if (requestHttp.getRequestHttpProxy() != null) {
36+
RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build();
37+
httpPost.setConfig(config);
38+
}
39+
if (file != null) {
40+
HttpEntity entity = MultipartEntityBuilder
41+
.create()
42+
.addBinaryBody("media", file)
43+
.setMode(HttpMultipartMode.RFC6532)
44+
.build();
45+
httpPost.setEntity(entity);
46+
}
47+
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
48+
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
49+
WxError error = WxError.fromJson(responseContent, wxType);
50+
if (error.getErrorCode() != 0) {
51+
throw new WxErrorException(error);
52+
}
53+
return WxAuditMediaUploadResult.fromJson(responseContent);
54+
} finally {
55+
httpPost.releaseConnection();
56+
}
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package me.chanjar.weixin.common.util.http.jodd;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.charset.StandardCharsets;
6+
7+
import jodd.http.HttpConnectionProvider;
8+
import jodd.http.HttpRequest;
9+
import jodd.http.HttpResponse;
10+
import jodd.http.ProxyInfo;
11+
import me.chanjar.weixin.common.bean.result.WxAuditMediaUploadResult;
12+
import me.chanjar.weixin.common.enums.WxType;
13+
import me.chanjar.weixin.common.error.WxError;
14+
import me.chanjar.weixin.common.error.WxErrorException;
15+
import me.chanjar.weixin.common.util.http.AuditMediaUploadRequestExecutor;
16+
import me.chanjar.weixin.common.util.http.RequestHttp;
17+
18+
/**
19+
* @author yangyh22
20+
* @since 2020/11/14
21+
*/
22+
public class JoddHttpAuditMediaUploadRequestExecutor extends AuditMediaUploadRequestExecutor<HttpConnectionProvider, ProxyInfo> {
23+
24+
public JoddHttpAuditMediaUploadRequestExecutor(RequestHttp requestHttp) {
25+
super(requestHttp);
26+
}
27+
28+
@Override
29+
public WxAuditMediaUploadResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
30+
HttpRequest request = HttpRequest.post(uri);
31+
if (requestHttp.getRequestHttpProxy() != null) {
32+
requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
33+
}
34+
request.withConnectionProvider(requestHttp.getRequestHttpClient());
35+
request.form("media", file);
36+
HttpResponse response = request.send();
37+
response.charset(StandardCharsets.UTF_8.name());
38+
39+
String responseContent = response.bodyText();
40+
WxError error = WxError.fromJson(responseContent, wxType);
41+
if (error.getErrorCode() != 0) {
42+
throw new WxErrorException(error);
43+
}
44+
return WxAuditMediaUploadResult.fromJson(responseContent);
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package me.chanjar.weixin.common.util.http.okhttp;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import me.chanjar.weixin.common.bean.result.WxAuditMediaUploadResult;
7+
import me.chanjar.weixin.common.enums.WxType;
8+
import me.chanjar.weixin.common.error.WxError;
9+
import me.chanjar.weixin.common.error.WxErrorException;
10+
import me.chanjar.weixin.common.util.http.AuditMediaUploadRequestExecutor;
11+
import me.chanjar.weixin.common.util.http.RequestHttp;
12+
import okhttp3.MediaType;
13+
import okhttp3.MultipartBody;
14+
import okhttp3.OkHttpClient;
15+
import okhttp3.Request;
16+
import okhttp3.RequestBody;
17+
import okhttp3.Response;
18+
19+
/**
20+
* @author yangyh22
21+
* @since 2020/11/14
22+
*/
23+
public class OkHttpAuditMediaUploadRequestExecutor extends AuditMediaUploadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
24+
25+
public OkHttpAuditMediaUploadRequestExecutor(RequestHttp requestHttp) {
26+
super(requestHttp);
27+
}
28+
29+
@Override
30+
public WxAuditMediaUploadResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
31+
32+
RequestBody body = new MultipartBody.Builder()
33+
.setType(MediaType.parse("multipart/form-data"))
34+
.addFormDataPart("media",
35+
file.getName(),
36+
RequestBody.create(MediaType.parse("application/octet-stream"), file))
37+
.build();
38+
Request request = new Request.Builder().url(uri).post(body).build();
39+
40+
Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
41+
String responseContent = response.body().string();
42+
WxError error = WxError.fromJson(responseContent, wxType);
43+
if (error.getErrorCode() != 0) {
44+
throw new WxErrorException(error);
45+
}
46+
return WxAuditMediaUploadResult.fromJson(responseContent);
47+
}
48+
49+
}

0 commit comments

Comments
 (0)