jfinal 微信 上传媒体文件

代码片段(2)[全屏查看所有代码]

1.[代码][Java]代码import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import com.jfinal.weixin.sdk.api.AccessTokenApi;import com.xinan.weixin.media.RecevieMedia;import org.apache.log4j.Logger;import com.xinan.utils.ToolString;import com.alibaba.fastjson.JSONObject;public class MediaApi {private static Logger log = Logger.getLogger(MediaApi.class);/** * 上传媒体文件 ** @param accessToken 接口访问凭证 * @param type 媒体文件类型(image、voice、video和thumb) * @param mediaFileUrl 媒体文件的url */public static RecevieMedia uploadMedia(String accessToken, String type, String mediaFileUrl) {RecevieMedia recevieMedia = null;// 拼装请求地址String uploadMediaUrl = “http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE”;uploadMediaUrl = uploadMediaUrl.replace(“ACCESS_TOKEN”, accessToken).replace(“TYPE”, type);// 定义数据分隔符String boundary = “————7da2e536604c8”;try {URL uploadUrl = new URL(uploadMediaUrl);HttpURLConnection uploadConn = (HttpURLConnection) uploadUrl.openConnection();uploadConn.setDoOutput(true);uploadConn.setDoInput(true);uploadConn.setRequestMethod(“POST”);// 设置请求头Content-TypeuploadConn.setRequestProperty(“Content-Type”, “multipart/form-data;boundary=” + boundary);// 获取媒体文件上传的输出流(往微信服务器写数据)OutputStream outputStream = uploadConn.getOutputStream();URL mediaUrl = new URL(mediaFileUrl);HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();meidaConn.setDoOutput(true);meidaConn.setRequestMethod(“GET”);// 从请求头中获取内容类型String contentType = meidaConn.getHeaderField(“Content-Type”);// 根据内容类型判断文件扩展名String fileExt = ToolString.getFileExt(contentType);// 请求体开始outputStream.write((“–” + boundary + “\r\n”).getBytes());outputStream.write(String.format(“Content-Disposition: form-data; name=\”media\”; filename=\”file1%s\”\r\n”, fileExt).getBytes());outputStream.write(String.format(“Content-Type: %s\r\n\r\n”, contentType).getBytes());// 获取媒体文件的输入流(读取文件)BufferedInputStream bis = new BufferedInputStream(meidaConn.getInputStream());byte[] buf = new byte[8096];int size = 0;while ((size = bis.read(buf)) != -1) {// 将媒体文件写到输出流(往微信服务器写数据)outputStream.write(buf, 0, size);}// 请求体结束outputStream.write((“\r\n–” + boundary + “–\r\n”).getBytes());outputStream.close();bis.close();meidaConn.disconnect();// 获取媒体文件上传的输入流(从微信服务器读数据)InputStream inputStream = uploadConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, “utf-8”);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);StringBuffer buffer = new StringBuffer();String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;uploadConn.disconnect();// 使用JSON-lib解析返回结果JSONObject jsonObject = JSONObject.parseObject(buffer.toString());recevieMedia = new RecevieMedia();recevieMedia.setErrcode(jsonObject.getString(“errcode”));recevieMedia.setErrmsg(jsonObject.getString(“errmsg”));recevieMedia.setType(jsonObject.getString(“type”));// type等于thumb时的返回结果和其它类型不一样if (“thumb”.equals(type)){recevieMedia.setMedia_id(jsonObject.getString(“thumb_media_id”));}else{recevieMedia.setMedia_id(jsonObject.getString(“media_id”));}recevieMedia.setCreated_at(jsonObject.getString(“created_at”));} catch (Exception e) {recevieMedia = null;log.error(“上传媒体文件失败:{}”, e);}return recevieMedia;}/** * 下载媒体文件 ** @param accessToken 接口访问凭证 * @param mediaId 媒体文件标识 * @param savePath 文件在服务器上的存储路径 * @return */public static String getMedia(String accessToken, String mediaId, String savePath) {String filePath = null;// 拼接请求地址String requestUrl = “http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID”;requestUrl = requestUrl.replace(“ACCESS_TOKEN”, accessToken).replace(“MEDIA_ID”, mediaId);System.out.println(requestUrl);try {URL url = new URL(requestUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.setRequestMethod(“GET”);if (!savePath.endsWith(“/”)) {savePath += “/”;}// 根据内容类型获取扩展名String fileExt = ToolString.getFileExt(conn.getHeaderField(“Content-Type”));// 将mediaId作为文件名filePath = savePath + mediaId + fileExt;BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());FileOutputStream fos = new FileOutputStream(new File(filePath));byte[] buf = new byte[8096];int size = 0;while ((size = bis.read(buf)) != -1)fos.write(buf, 0, size);fos.close();bis.close();conn.disconnect();log.info(“下载媒体文件成功,,filePath=” + filePath);} catch (Exception e) {filePath = null;log.error(“下载媒体文件失败:{}”, e);}return filePath;}public static void main(String args[]) {// 获取接口访问凭证System.out.println(“asdasd”);String accessToken= AccessTokenApi.getAccessToken().getAccessToken() ;System.out.println(accessToken);/*** 上传多媒体文件*/RecevieMedia recevieMedia = uploadMedia(accessToken, “voice”, “url”);System.out.println(recevieMedia.getMedia_id());System.out.println(recevieMedia.getType());System.out.println(recevieMedia.getCreated_at());/*** 下载多媒体文件*/getMedia(accessToken, “N7xWhOGYSLWUMPzVcGnxKFbhXeD_lLT5sXxyxDGEsCzWIB2CcUijSeQOYjWLMpcn”, “G:/download”);}}

还深深埋在心底,要除去,怕是不能活命。

jfinal 微信 上传媒体文件

相关文章:

你感兴趣的文章:

标签云: