微信公众号开发

来源:互联网 发布:中南大学网络考试答案 编辑:程序博客网 时间:2024/05/04 20:14

一、多媒体文件的上传及下载

  微信公众号多媒体文件上传及下载(wu1g119博主)

多媒体文件修改成网络地址获取,非本地文件,代码如下:

public String MediaUpload(String access_token, String type, String mediaUrl) {String media_id = "";String url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" + access_token + "&type="+ type;try {if (StringUtils.isBlank(mediaUrl)) {return media_id;}//根据多媒体文件URL获取输入流 URL fileUrl = new URL(mediaUrl);DataInputStream in = new DataInputStream(fileUrl.openStream());File f = new File(mediaUrl);//请求微信上传多媒体文件接口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");//filename必须以.jpg为后缀,否则报"40005,不合法的文件类型"错误sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + f.getName() + "\"\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);// 文件正文部分  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();/**  * 读取服务器响应,必须读取,否则提交不成功  */try {StringBuffer buffer = new StringBuffer();BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));String line = null;while ((line = reader.readLine()) != null) {buffer.append(line);}String respStr = buffer.toString();if (!respStr.contains("errcode")) {ObjectMapper mapper = new ObjectMapper();try {MediaUploadResultDto dto = mapper.readValue(respStr.toString(), MediaUploadResultDto.class);media_id = dto.getMedia_id();} catch (JsonParseException e) {logger.warn("解析json错误," + respStr, e);} catch (JsonMappingException e) {logger.warn("解析json错误," + respStr, e);} catch (IOException e) {logger.warn("解析json时IOException," + respStr, e);}}} catch (Exception e) {logger.warn("发送POST请求出现异常!", e);}} catch (Exception e) {logger.warn("调用微信多媒体上传接口上传文件失败!文件路径=" + mediaUrl, e);}return media_id;}



0 0
原创粉丝点击