java上传文件到微信服务器


Java代码   收藏代码
  1. package com.sz.kcygl.common.util;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.DataInputStream;  
  5. import java.io.DataOutputStream;  
  6. import java.io.File;  
  7. import java.io.FileInputStream;  
  8. import java.io.IOException;  
  9. import java.io.InputStreamReader;  
  10. import java.io.OutputStream;  
  11. import java.net.HttpURLConnection;  
  12. import java.net.URL;  
  13.   
  14. import net.sf.json.JSONArray;  
  15. import net.sf.json.JSONObject;  
  16.   
  17. public class FileUpload {  
  18.   
  19.     /** 
  20.     * 模拟form表单的形式 ,上传文件 以输出流的形式把文件写入到url中,然后用输入流来获取url的响应 
  21.     *  
  22.     * @param url 请求地址 form表单url地址 
  23.     * @param filePath 文件在服务器保存路径 
  24.     * @return String url的响应信息返回值 
  25.     * @throws IOException 
  26.     */  
  27.     public static String send(String url, String filePath) throws IOException {  
  28.   
  29.   
  30.     String result = null;  
  31.   
  32.   
  33.     File file = new File(filePath);  
  34.     if (!file.exists() || !file.isFile()) {  
  35.     throw new IOException("文件不存在");  
  36.     }  
  37.   
  38.   
  39.     /** 
  40.     * 第一部分 
  41.     */  
  42.     URL urlObj = new URL(url);  
  43.     // 连接  
  44.     HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();  
  45.   
  46.   
  47.     /** 
  48.     * 设置关键值 
  49.     */  
  50.     con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式  
  51.     con.setDoInput(true);  
  52.     con.setDoOutput(true);  
  53.     con.setUseCaches(false); // post方式不能使用缓存  
  54.   
  55.   
  56.     // 设置请求头信息  
  57.     con.setRequestProperty("Connection""Keep-Alive");  
  58.     con.setRequestProperty("Charset""UTF-8");  
  59.   
  60.   
  61.     // 设置边界  
  62.     String BOUNDARY = "----------" + System.currentTimeMillis();  
  63.     con.setRequestProperty("Content-Type""multipart/form-data; boundary="+ BOUNDARY);  
  64.   
  65.   
  66.     // 请求正文信息  
  67.   
  68.   
  69.     // 第一部分:  
  70.     StringBuilder sb = new StringBuilder();  
  71.     sb.append("--"); // 必须多两道线  
  72.     sb.append(BOUNDARY);  
  73.     sb.append("\r\n");  
  74.     sb.append("Content-Disposition: form-data;name=\"file\";filename=\""  
  75.     + file.getName() + "\"\r\n");  
  76.     sb.append("Content-Type:application/octet-stream\r\n\r\n");  
  77.   
  78.   
  79.     byte[] head = sb.toString().getBytes("utf-8");  
  80.   
  81.   
  82.     // 获得输出流  
  83.     OutputStream out = new DataOutputStream(con.getOutputStream());  
  84.     // 输出表头  
  85.     out.write(head);  
  86.   
  87.   
  88.     // 文件正文部分  
  89.     // 把文件已流文件的方式 推入到url中  
  90.     DataInputStream in = new DataInputStream(new FileInputStream(file));  
  91.     int bytes = 0;  
  92.     byte[] bufferOut = new byte[1024];  
  93.     while ((bytes = in.read(bufferOut)) != -1) {  
  94.     out.write(bufferOut, 0, bytes);  
  95.     }  
  96.     in.close();  
  97.   
  98.   
  99.     // 结尾部分  
  100.     byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线  
  101.   
  102.   
  103.     out.write(foot);  
  104.   
  105.   
  106.     out.flush();  
  107.     out.close();  
  108.   
  109.   
  110.     StringBuffer buffer = new StringBuffer();  
  111.     BufferedReader reader = null;  
  112.     try {  
  113.     // 定义BufferedReader输入流来读取URL的响应  
  114.     reader = new BufferedReader(new InputStreamReader(con.getInputStream()));  
  115.     String line = null;  
  116.     while ((line = reader.readLine()) != null) {  
  117.     //System.out.println(line);  
  118.     buffer.append(line);  
  119.     }  
  120.     if(result==null){  
  121.     result = buffer.toString();  
  122.     }  
  123.     } catch (IOException e) {  
  124.     System.out.println("发送POST请求出现异常!" + e);  
  125.     e.printStackTrace();  
  126.     throw new IOException("数据读取异常");  
  127.     } finally {  
  128.     if(reader!=null){  
  129.     reader.close();  
  130.     }  
  131.   
  132.     }  
  133.   
  134.     JSONObject jsonObj = JSONObject.fromObject(result);  
  135.     String mediaId = jsonObj.getString("media_id");  
  136.     return mediaId;  
  137.     }  
  138.   
  139.   
  140.     public static void main(String[] args) throws IOException {  
  141.     String filePath = "D:/tomcat/apache-tomcat-6.0.37/webapps/Allianture_frame/upload/test3_20140117094014814.jpg";  
  142.     String sendUrl = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=yeQEu_OrXQanGC_G56BZ7IKJDCQCaO0ryDWKX2N2JDzGRGuiZACTGjsQXW-S-K1fgm_MViG_R5AwIEBhKKCNmUevg0H3ksfzlIfkFcP1y8g2st2LYwloL_iPqhedlT5_Z1zSM2mZSmu6cI54sayMPw&type=image";  
  143.     String result = null;  
  144.     FileUpload fileUpload = new FileUpload();  
  145.     result = fileUpload.send(sendUrl, filePath);  
  146.     System.out.println(result);  
  147.   
  148.     }  
  149. }  

你可能感兴趣的:(JAVA学习笔记)