上传图片到微信素材管理中心java实现代码

该代码段展示了如何使用Java实现调用微信公众号的媒体资源上传接口,通过POST请求以multipart/form-data方式上传图片文件,获取media_id。主要涉及HTTP连接设置、请求头配置、文件读写及边界设置等步骤。
摘要由CSDN通过智能技术生成

public class WXCloudClient {
/**
http请求方式:POST/FORM,使用https https://api.weixin.qq.com/cgi-bin/media/upload?
* access_token=ACCESS_TOKEN&type=TYPE
* 调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):
* curl -F media=@test.jpg
* “https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE”
* */

public JSONObject getMediaId(String mediaIdUrl, String token, File file)throws Exception{

   StringBuilder sb = new StringBuilder(mediaIdUrl);
   String url = sb.append("?").append("access_token=").append(token)
           .append("&").append("type=").append("image").toString();
   java.net.URL urlObj = new URL(url);

   // 创建Http连接
   HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
   conn.setRequestMethod("POST");
   conn.setDoInput(true);
   conn.setDoOutput(true);
   conn.setUseCaches(false);   // 使用post提交需要设置忽略缓存

   //消息请求头信息
   conn.setRequestProperty("Connection", "Keep-Alive");
   conn.setRequestProperty("Charset", "UTF-8");

   //设置边界
   String BOUNDARY = "----------" + System.currentTimeMillis();
   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);

   StringBuilder builder = new StringBuilder();
   builder.append("--");    // 必须多两道线
   builder.append(BOUNDARY);
   builder.append("\r\n");
   builder.append("Content-Disposition:form-data;name=\"media\";filename=\"" + file.getName() + "\";filelength=\"" + file.length() + "\"\r\n");
   builder.append("Content-Type:application/octet-stream\r\n\r\n");

   byte[] head = builder.toString().getBytes("utf-8");

   // 创建输出流
   OutputStream out = new DataOutputStream(conn.getOutputStream());
   // 获得输出流表头
   out.write(head);

   //文件正文部分
   DataInputStream in = new DataInputStream(new FileInputStream(file));
   int bytes = 0;
   byte[] bufferOut = new byte[1024 * 1024 * 10]; // 10M
   while ((bytes = in.read(bufferOut)) != -1) {
       out.write(bufferOut, 0, bytes);
   }
   in.close();

   //结尾
   byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");
   out.write(foot);
   out.flush();
   out.close();

   // 获取响应
   StringBuffer buffer = new StringBuffer();
   BufferedReader reader = null;
   String result = null;
   try {
       reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
       String line = null;
       while ((line = reader.readLine()) != null) {
           buffer.append(line);
       }
       if (result == null) {
           result = buffer.toString();
       }
   } catch (IOException e) {
       e.printStackTrace();
   } finally {
       reader.close();
   }

   JSONObject json = JSONObject.parseObject(result);
   BaseLog.getErrorLog().info("返回的结果getMediaId:{}",json);
   return json;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值