1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java微信公众号上传永久素材 微信公众号开发-永久素材的上传

java微信公众号上传永久素材 微信公众号开发-永久素材的上传

时间:2018-11-04 20:56:47

相关推荐

java微信公众号上传永久素材 微信公众号开发-永久素材的上传

几种素材的上传方式

微信服务器素材上传

上传素材得到返回JSON

调用示例(使用curl命令,用FORM表单方式上传一个图片):

curl -F media=@test.jpg “https://api./cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN”

直接上代码-_-

/**

* 微信服务器素材上传

*

* @param file

* 表单名称media

* @param token

* access_token

* @param type

* type只支持四种类型素材(video/image/voice/thumb)

* @param upurl

* 使用微信提供的接口即可

*/

public static JSONObject uploadMedia(File file, String token, String type, String upurl) {

if (file == null || token == null || type == null) {

return null;

}

if (!file.exists()) {

logger.info("上传文件不存在,请检查!");

return null;

}

String url = upurl;

JSONObject jsonObject = null;

PostMethod post = new PostMethod(url);

post.setRequestHeader("Connection", "Keep-Alive");

post.setRequestHeader("Cache-Control", "no-cache");

FilePart media = null;

HttpClient httpClient = new HttpClient();

// 信任任何类型的证书

Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);

Protocol.registerProtocol("https", myhttps);

try {

media = new FilePart("media", file);

Part[] parts = new Part[] { new StringPart("access_token", token), new StringPart("type", type), media };

MultipartRequestEntity entity = new MultipartRequestEntity(parts, post.getParams());

post.setRequestEntity(entity);

int status = httpClient.executeMethod(post);

if (status == HttpStatus.SC_OK) {

String text = post.getResponseBodyAsString();

jsonObject = JSONObject.fromObject(text);

} else {

logger.info("upload Media failure status is:" + status);

}

} catch (FileNotFoundException execption) {

execption.printStackTrace();

} catch (HttpException execption) {

execption.printStackTrace();

} catch (IOException execption) {

execption.printStackTrace();

}

return jsonObject;

}

上传其他类型永久素材,模拟form表单的形式

// 素材上传(POST)

规定上传地址

public static final String UPLOAD_MEDIA = “https://api./cgi-bin/material/add_material”;

/**

* 模拟form表单的形式 ,上传文件 以输出流的形式把文件写入到url中,然后用输入流来获取url的响应

*

* @param url

* 请求地址 form表单url地址

* @param type

* 上传类型

* @param title

* 视频标题

* @param introduction

* 视频描述

* @return

*/

public static JSONObject uploadVideo(File file, String type, String title, String introduction, String token) {

String url = UPLOAD_MEDIA + "?access_token=" + token + "&type=" + type;

String result = null;

JSONObject jsonObject = null;

try {

URL uploadURL = new URL(url);

HttpURLConnection conn = (HttpURLConnection) uploadURL.openConnection();

conn.setConnectTimeout(5000);

conn.setReadTimeout(30000);

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

conn.setRequestMethod("POST");

conn.setRequestProperty("Connection", "Keep-Alive");

conn.setRequestProperty("Cache-Control", "no-cache");

String boundary = "-----------------------------" + System.currentTimeMillis();

conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

OutputStream output = conn.getOutputStream();

output.write(("--" + boundary + "\r\n").getBytes());

output.write(

String.format("Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n", file.getName())

.getBytes());

output.write("Content-Type: video/mp4 \r\n\r\n".getBytes());

byte[] data = new byte[1024];

int len = 0;

FileInputStream input = new FileInputStream(file);

while ((len = input.read(data)) > -1) {

output.write(data, 0, len);

}

/* 对类型为video的素材进行特殊处理 */

if ("video".equals(type)) {

output.write(("--" + boundary + "\r\n").getBytes());

output.write("Content-Disposition: form-data; name=\"description\";\r\n\r\n".getBytes());

output.write(

String.format("{\"title\":\"%s\", \"introduction\":\"%s\"}", title, introduction).getBytes());

}

output.write(("\r\n--" + boundary + "--\r\n\r\n").getBytes());

output.flush();

output.close();

input.close();

InputStream resp = conn.getInputStream();

StringBuffer sb = new StringBuffer();

while ((len = resp.read(data)) > -1)

sb.append(new String(data, 0, len, "utf-8"));

resp.close();

result = sb.toString();

jsonObject = JSONObject.fromObject(result);

} catch (IOException e) {

// ....

}

return jsonObject;

}

得到返回json即可。

多媒体下载接口

// 素材下载接口:不支持视频文件的下载(GET)

private static final String DOWNLOAD_MEDIA = “http://file.api./cgi-bin/media/get?access_token=%s&media_id=%s”;

使用String.format() 替换对应%s即可

这里直接将得到的相应输出到文件File中

/**

* 以http方式发送请求,并将请求响应内容输出到文件

*

* @param path

* 请求路径

* @param method

* 请求方法

* @param body

* 请求数据

* @return 返回响应的存储到文件

*/

public static File httpRequestToFile(String fileName, String path, String method, String body) {

if (fileName == null || path == null || method == null) {

return null;

}

File file = null;

HttpURLConnection conn = null;

InputStream inputStream = null;

FileOutputStream fileOut = null;

try {

URL url = new URL(path);

conn = (HttpURLConnection) url.openConnection();

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

conn.setRequestMethod(method);

if (null != body) {

OutputStream outputStream = conn.getOutputStream();

outputStream.write(body.getBytes("UTF-8"));

outputStream.close();

}

inputStream = conn.getInputStream();

if (inputStream != null) {

file = new File(fileName);

} else {

return file;

}

// 写入到文件

fileOut = new FileOutputStream(file);

if (fileOut != null) {

int c = inputStream.read();

while (c != -1) {

fileOut.write(c);

c = inputStream.read();

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (conn != null) {

conn.disconnect();

}

/*

* 必须关闭文件流 否则JDK运行时,文件被占用其他进程无法访问

*/

try {

inputStream.close();

fileOut.close();

} catch (IOException execption) {

execption.printStackTrace();

}

}

return file;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。