请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

jeesite

 找回密码
 注册新会员
查看: 466|回复: 1

[已解决] HttpURLConnection2 java 上传

[复制链接]
admin 发表于 2017-12-22 12:43:09 | 显示全部楼层 |阅读模式
  1. import java.io.DataOutputStream;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.util.HashMap;
  9. import java.util.Map;

  10. public class HttpURLConnection2 {
  11.         public final static String FILE_PATH = "Rec_004.wav";
  12.         public final static String POST_URL = "http://dev.hivoice.cn/exp_center/voiceTransition/audioTransText.action?t=0.3315516331608983&fileName=C:%255Cfakepath%255C"
  13.                         + FILE_PATH + "&language=chinese&domain=general";

  14.         public static void main(String[] args) throws IOException {
  15.                 Map<String, File> files = new HashMap<String, File>();
  16.                 File file = new File(FILE_PATH);
  17.                 files.put("uploadedFile", file);
  18.                 HttpURLConnection2.post(POST_URL, new HashMap<String, String>(), files);
  19.         }

  20.         /**
  21.          * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
  22.          *
  23.          * @param actionUrl
  24.          *            访问的服务器URL
  25.          * @param params
  26.          *            普通参数
  27.          * @param files
  28.          *            文件参数
  29.          * @return
  30.          * @throws IOException
  31.          */
  32.         public static void post(String actionUrl, Map<String, String> params,
  33.                         Map<String, File> files) throws IOException {

  34.                 String BOUNDARY = java.util.UUID.randomUUID().toString();
  35.                 String PREFIX = "--", LINEND = "\r\n";
  36.                 String MULTIPART_FROM_DATA = "multipart/form-data";
  37.                 String CHARSET = "UTF-8";

  38.                 URL uri = new URL(actionUrl);
  39.                 HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
  40.                 conn.setReadTimeout(5 * 1000); // 缓存的最长时间
  41.                 conn.setDoInput(true);// 允许输入
  42.                 conn.setDoOutput(true);// 允许输出
  43.                 conn.setUseCaches(false); // 不允许使用缓存
  44.                 conn.setRequestMethod("POST");
  45.                 conn.setRequestProperty("connection", "keep-alive");
  46.                 conn.setRequestProperty("Charsert", "UTF-8");
  47.                 conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
  48.                                 + ";boundary=" + BOUNDARY);

  49.                 conn.addRequestProperty("Content-Length", "341676");
  50.                 conn.addRequestProperty("Accept", "*/*");
  51.                 conn.addRequestProperty("Origin", "http://dev.hivoice.cn");
  52.                 conn.addRequestProperty("X-Requested-With", "XMLHttpRequest");
  53.                 conn.addRequestProperty(
  54.                                 "User-Agent",
  55.                                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
  56.                 conn.addRequestProperty("Content-Type",
  57.                                 "multipart/form-data; boundary=----WebKitFormBoundary4ABRo8YyLkfF4J9A");
  58.                 conn.addRequestProperty("Referer",
  59.                                 "http://dev.hivoice.cn/exp_center/voiceTransition/voiceTransition.jsp");
  60.                 conn.addRequestProperty("Accept-Encoding", "gzip, deflate");
  61.                 conn.addRequestProperty("Accept-Language", "zh-CN,zh;q=0.8");
  62.                 conn.addRequestProperty(
  63.                                 "Cookie",
  64.                                 "__guid=16791340.1699391929715071000.1513906245209.0935; JSESSIONID=4318AB7433EBCE4BD391018CA596BF4F; _pk_ref.1.11c7=%5B%22%22%2C%22%22%2C1513911052%2C%22http%3A%2F%2Fwww.unisound.com%2Fusc.html%22%5D; _pk_id.1.11c7=2be88ca4242c76e8.1513906260.2.1513911059.1513911052.; _pk_ses.1.11c7=*; visitorUid=1b7be3eee84b4b03b50ac56a5691332d; monitor_count=9; _pk_id.1.e5f6=2be88ca4242c76e8.1513906246.2.1513911215.1513911064.; _pk_ses.1.e5f6=*");

  65.                 // 首先组拼文本类型的参数
  66.                 StringBuilder sb = new StringBuilder();
  67.                 for (Map.Entry<String, String> entry : params.entrySet()) {
  68.                         sb.append(PREFIX);
  69.                         sb.append(BOUNDARY);
  70.                         sb.append(LINEND);
  71.                         sb.append("Content-Disposition: form-data; name=\""
  72.                                         + entry.getKey() + "\"" + LINEND);
  73.                         sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
  74.                         sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
  75.                         sb.append(LINEND);
  76.                         sb.append(entry.getValue());
  77.                         sb.append(LINEND);
  78.                 }

  79.                 DataOutputStream outStream = new DataOutputStream(
  80.                                 conn.getOutputStream());
  81.                 outStream.write(sb.toString().getBytes());
  82.                 InputStream in = null;
  83.                 // 发送文件数据
  84.                 if (files != null) {
  85.                         for (Map.Entry<String, File> file : files.entrySet()) {
  86.                                 StringBuilder sb1 = new StringBuilder();
  87.                                 sb1.append(PREFIX);
  88.                                 sb1.append(BOUNDARY);
  89.                                 sb1.append(LINEND);
  90.                                
  91.                                
  92.                                 // name是post中传参的键 filename是文件的名称
  93.                                 sb1.append("Content-Disposition: form-data; name=\"uploadedFile\"; filename=\""
  94.                                                 + file.getKey() + "\"" + LINEND);
  95.                                 sb1.append("Content-Type: audio/wav; charset="
  96.                                                 + CHARSET + LINEND);
  97.                                 sb1.append(LINEND);
  98.                                 outStream.write(sb1.toString().getBytes());

  99.                                 InputStream is = new FileInputStream(file.getValue());
  100.                                 byte[] buffer = new byte[1024];
  101.                                 int len = 0;
  102.                                 while ((len = is.read(buffer)) != -1) {
  103.                                         outStream.write(buffer, 0, len);
  104.                                 }

  105.                                 is.close();
  106.                                 outStream.write(LINEND.getBytes());
  107.                         }

  108.                         // 请求结束标志
  109.                         byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
  110.                         outStream.write(end_data);
  111.                         outStream.flush();
  112.                         // 得到响应码
  113.                         int res = conn.getResponseCode();
  114.                         System.out.println(res);
  115.                         if (res == 200) {
  116.                                 in = conn.getInputStream();
  117.                                 int ch;
  118.                                 StringBuilder sb2 = new StringBuilder();
  119.                                 while ((ch = in.read()) != -1) {

  120.                                         sb2.append((char) ch);
  121.                                 }

  122.                                 System.out.println("最终的返回结果为:" + sb2.toString());
  123.                         }
  124.                         outStream.close();
  125.                         conn.disconnect();
  126.                 }
  127.                 // return in.toString();
  128.         }

  129.         // 以数据流的形式传参
  130.         public static String postFile(String actionUrl, Map<String, String> params,
  131.                         Map<String, byte[]> files) throws Exception {
  132.                 StringBuilder sb2 = null;
  133.                 String BOUNDARY = java.util.UUID.randomUUID().toString();
  134.                 String PREFIX = "--", LINEND = "\r\n";
  135.                 String MULTIPART_FROM_DATA = "multipart/form-data";
  136.                 String CHARSET = "UTF-8";

  137.                 URL uri = new URL(actionUrl);
  138.                 HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
  139.                 conn.setReadTimeout(6 * 1000); // 缓存的最长时间
  140.                 conn.setDoInput(true);// 允许输入
  141.                 conn.setDoOutput(true);// 允许输出
  142.                 conn.setUseCaches(false); // 不允许使用缓存
  143.                 conn.setRequestMethod("POST");
  144.                 conn.setRequestProperty("connection", "keep-alive");
  145.                 conn.setRequestProperty("Charsert", "UTF-8");
  146.                 conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
  147.                                 + ";boundary=" + BOUNDARY);

  148.                 // 首先组拼文本类型的参数
  149.                 StringBuilder sb = new StringBuilder();
  150.                 for (Map.Entry<String, String> entry : params.entrySet()) {
  151.                         sb.append(PREFIX);
  152.                         sb.append(BOUNDARY);
  153.                         sb.append(LINEND);
  154.                         sb.append("Content-Disposition: form-data; name=\""
  155.                                         + entry.getKey() + "\"" + LINEND);
  156.                         sb.append("Content-Type: audio/wav; charset=" + CHARSET + LINEND);
  157.                         sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
  158.                         sb.append(LINEND);
  159.                         sb.append(entry.getValue());
  160.                         sb.append(LINEND);
  161.                 }

  162.                 DataOutputStream outStream = new DataOutputStream(
  163.                                 conn.getOutputStream());
  164.                 outStream.write(sb.toString().getBytes());
  165.                 InputStream in = null;
  166.                 // 发送文件数据
  167.                 if (files != null) {
  168.                         for (Map.Entry<String, byte[]> file : files.entrySet()) {
  169.                                 StringBuilder sb1 = new StringBuilder();
  170.                                 sb1.append(PREFIX);
  171.                                 sb1.append(BOUNDARY);
  172.                                 sb1.append(LINEND);
  173.                                 sb1.append("Content-Disposition: form-data; name=\"pic\"; filename=\""
  174.                                                 + file.getKey() + "\"" + LINEND);
  175.                                 sb1.append("Content-Type: application/octet-stream; charset="
  176.                                                 + CHARSET + LINEND);
  177.                                 sb1.append(LINEND);
  178.                                 outStream.write(sb1.toString().getBytes());

  179.                                 // InputStream is = new FileInputStream(file.getValue());
  180.                                 // byte[] buffer = new byte[1024];
  181.                                 // int len = 0;
  182.                                 // while ((len = is.read(buffer)) != -1)
  183.                                 // {
  184.                                 // outStream.write(buffer, 0, len);
  185.                                 // }
  186.                                 // is.close();
  187.                                 outStream.write(file.getValue());

  188.                                 outStream.write(LINEND.getBytes());
  189.                         }

  190.                         // 请求结束标志
  191.                         byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
  192.                         outStream.write(end_data);
  193.                         outStream.flush();
  194.                         // 得到响应码
  195.                         int res = conn.getResponseCode();
  196.                         if (res == 200) {
  197.                                 in = conn.getInputStream();
  198.                                 int ch;
  199.                                 sb2 = new StringBuilder();
  200.                                 while ((ch = in.read()) != -1) {
  201.                                         sb2.append((char) ch);
  202.                                 }
  203.                                 System.out.println(sb2.toString());
  204.                         }
  205.                         outStream.close();
  206.                         conn.disconnect();
  207.                         // 解析服务器返回来的数据
  208.                         return sb2.toString();
  209.                 } else {
  210.                         return "Update icon Fail";
  211.                 }
  212.                 // return in.toString();
  213.         }
  214. }
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|手机版|小黑屋|Archiver|jeesite 官方论坛. ( 吉ICP备12004769号  

GMT+8, 2018-4-24 13:03 , Processed in 0.250000 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表