java实现上传网络图片到微信临时素材

本文实例为大家分享了java实现上传网络图片到微信临时素材的具体代码,供大家参考,具体内容如下

package org.afuos.playcontrol.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by Mohon on 2017/8/10.
 */
public class UploadPicToWx {

 /**
 * 网络图片上传到微信服务器
 *
 * @param urlPath 图片路径
 * @return JSONObject
 * @throws Exception
 */
 public String getMediaIdFromUrl(String urlPath, String fileType) throws Exception {
 String result = null;
 String url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token= Access_token &type=" + fileType + "";
 String fileName = urlPath.substring(urlPath.lastIndexOf("/") + 1);
 // 获取网络图片
 URL mediaUrl = new URL(urlPath);
 HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
 meidaConn.setDoOutput(true);
 meidaConn.setRequestMethod("GET");

 /**
  * 第一部分
  */
 URL urlObj = new URL(url);
 HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
 con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
 con.setDoInput(true);
 con.setDoOutput(true);
 con.setUseCaches(false); // post方式不能使用缓存
 // 设置请求头信息
 con.setRequestProperty("Connection", "Keep-Alive");
 con.setRequestProperty("Charset", "UTF-8");
 // 设置边界
 String BOUNDARY = "----------" + System.currentTimeMillis();
 con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
 // 请求正文信息
 // 第一部分:
 StringBuilder sb = new StringBuilder();
 sb.append("--"); // 必须多两道线
 sb.append(BOUNDARY);
 sb.append("\r\n");
 sb.append("Content-Disposition: form-data;name=\"media\";filename=\"" + fileName + "\"\r\n");
 sb.append("Content-Type:application/octet-stream\r\n\r\n");
 byte[] head = sb.toString().getBytes("utf-8");
 // 获得输出流
 OutputStream out = new DataOutputStream(con.getOutputStream());
 // 输出表头
 out.write(head);
 // 文件正文部分
 // 把文件已流文件的方式 推入到url中
 DataInputStream in = new DataInputStream(meidaConn.getInputStream());
 int bytes = 0;
 byte[] bufferOut = new byte[1024];
 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();
 meidaConn.disconnect();
 StringBuffer buffer = new StringBuffer();
 BufferedReader reader = null;
 try {
  // 定义BufferedReader输入流来读取URL的响应
  reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
  String line = null;
  while ((line = reader.readLine()) != null) {
  buffer.append(line);
  }
  if (result == null) {
  result = buffer.toString();
  }
 } catch (IOException e) {
  log.info("发送POST请求出现异常! {}", e);
  e.printStackTrace();
  throw new IOException("数据读取异常");
 } finally {
  if (reader != null) {
  reader.close();
  }
 }
 JSONObject jsonObj = JSON.parseObject(result);
 log.info("getMediaId jsonObj: {}", jsonObj);
 return jsonObj.getString("media_id");
 }
}

来源:UploadPicToWx.java

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java微信开发之上传下载多媒体文件

    回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务器下载文件,可以参考:http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件 上传下载多媒体文件的方法还是写到WeixinUtil.java中. 代码如下: import java.io.BufferedOutputStream; import java.io.BufferedReader; impo

  • 微信 java 实现js-sdk 图片上传下载完整流程

    最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结. 在这里能知道使用js api的基本配置 https://mp.weixin.qq.com/wiki t=resource/res_main&id=mp1421141115&token=&lang=zh_CN 我这里没有用checkJsApi去判断当前客户端版本是否支持指定JS接口,好.通过看开发文档,我们知道调用js接口直接都要通过config接口注入权限验证配置 <code class="

  • java实现上传网络图片到微信临时素材

    本文实例为大家分享了java实现上传网络图片到微信临时素材的具体代码,供大家参考,具体内容如下 package org.afuos.playcontrol.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; /** * Created b

  • 两种java文件上传实例讲解

    本文通过两种文件上传实例进行比较,帮助大家更好的学习java文件上传功能,具体内容如下 1. Java附件上传代码     @Controller public class UploadFile extends BaseJsonController{ /** * 附件上传 * * @param request * @param creativeFile * @param response * @return */ @RequestMapping(value = "/upload/uploadFi

  • java文件上传技术深入剖析

    本文实例为大家分享了java文件上传技术,供大家参考,具体内容如下 表单: 客户端发送HTTP必须使用multipart/form-data数据类型,表示复合数据类型.即: 在表单中使用html标签. 需要的包:         Commons-fileupload.jar,核心上传文件工具都在这个包中.         commons-io.jar – 上传文件所需要的包 上传文件类详解: DiskFileItemFactory-创建监时文件目录,指是缓存区大小 ServletFileUplo

  • java 文件上传(单文件与多文件)

    java 文件上传(单文件与多文件) 一.简述 一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件上传这部分知识做下笔记. 二.单文件上传 1.页面 这里以一个简单的表单提交为例子,文件上传需要将表单的提交方法设置为post,将enctype的值设置为"multipart/form-data". <form action="${pa

  • 简述Java异步上传文件的三种方式

    本文为大家分享了三种Java异步上传文件方式,供大家参考,具体内容如下 用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpRequest2来实现异步上传. 第一种使用浏览器插件上传,需要一定的底层编码功底,在这里我就不讲了,以免误人子弟,提出这点大家可以自行百度. 第二种使用隐藏的iframe模拟异步上传.为什么在这里说的是模拟呢?因为我们其实是将返回结果放在了一个隐藏的iframe中,所以才没有使当前页面跳转,感觉就像是异步操

  • java文件上传Demo(必看篇)

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype="multipart/form-data" 3.开始编写相关代码 这里会用到几个关键的类:磁盘文件工厂DiskFileItemFactory : 创建servlet文件上传类:ServletFileUpload 还有几个重要的方法:DiskFileItemFactory类用于将以临时文件形式保存在磁

  • Java图片上传实现代码

    本文实例为大家分享了Java图片上传代码,供大家参考,具体内容如下 import java.io.*; import java.net.*; /* *发送端 */ class picsend { public static void main(String[] args) throws Exception { if(args.length!=1) { System.out.println("请选择一张.jpg图片"); return; } File file = new File(ar

  • Socket+JDBC+IO实现Java文件上传下载器DEMO详解

    该demo实现的功能有: 1.用户注册: 注册时输入两次密码,若两次输入不一致,则注册失败,需要重新输入.若用户名被注册过,则提示用户重新输入用户名: 2.用户登录: 需要验证数据库中是否有对应的用户名和密码,若密码输错三次,则终止用户的登录操作: 3.文件上传: 从本地上传文件到文件数据库中 4.文件下载: 从数据库中下载文件到本地 5.文件更新: 根据id可更新数据库中的文件名 6.文件删除: 根据id删除数据库中某一个文件 7.看数据库所有文件; 8.查看文件(根据用户名); 9.查看文件

  • java web上传文件和下载文件代码片段分享

    本文实例为大家分享了java web上传文件和下载文件的具体代码,供大家参考,具体内容如下 /** * Purpose:上传文档 * * @param req * @param fileTitle * @param fileType * @param fileDesc * @return */ @RequestMapping("upload") public ModelAndView upload(HttpServletRequest req, String fileType, Str

  • java webservice上传下载文件代码分享

    本文实例为大家分享了java webservice上传下载文件代码,供大家参考,具体内容如下 1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Date; import java.text.Simple

随机推荐