废话少说,直接上代码:
  1.   /**
  2. * 测试上传图片
  3. *
  4. */
  5. public static void testUploadImage(){
  6. String url = "http://xxxtest/Api/testUploadModelBaking";
  7. String fileName = "e:/username/textures/antimap_0017.png";
  8. Map<String, String> textMap = new HashMap<String, String>();
  9. //可以设置多个input的name,value
  10. textMap.put("name", "testname");
  11. textMap.put("type", "2");
  12. //设置file的name,路径
  13. Map<String, String> fileMap = new HashMap<String, String>();
  14. fileMap.put("upfile", fileName);
  15. String contentType = "";//image/png
  16. String ret = formUpload(url, textMap, fileMap,contentType);
  17. System.out.println(ret);
  18. //{"status":"0","message":"add succeed","baking_url":"group1\/M00\/00\/A8\/CgACJ1Zo-LuAN207AAQA3nlGY5k151.png"}
  19. }
  20.  
  21. /**
  22. * 上传图片
  23. * @param urlStr
  24. * @param textMap
  25. * @param fileMap
  26. * @param contentType 没有传入文件类型默认采用application/octet-stream
  27. * contentType非空采用filename匹配默认的图片类型
  28. * @return 返回response数据
  29. */
  30. @SuppressWarnings("rawtypes")
  31. public static String formUpload(String urlStr, Map<String, String> textMap,
  32. Map<String, String> fileMap,String contentType) {
  33. String res = "";
  34. HttpURLConnection conn = null;
  35. // boundary就是request头和上传文件内容的分隔符
  36. String BOUNDARY = "---------------------------123821742118716";
  37. try {
  38. URL url = new URL(urlStr);
  39. conn = (HttpURLConnection) url.openConnection();
  40. conn.setConnectTimeout(5000);
  41. conn.setReadTimeout(30000);
  42. conn.setDoOutput(true);
  43. conn.setDoInput(true);
  44. conn.setUseCaches(false);
  45. conn.setRequestMethod("POST");
  46. conn.setRequestProperty("Connection", "Keep-Alive");
  47. // conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
  48. conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);
  49. OutputStream out = new DataOutputStream(conn.getOutputStream());
  50. // text
  51. if (textMap != null) {
  52. StringBuffer strBuf = new StringBuffer();
  53. Iterator iter = textMap.entrySet().iterator();
  54. while (iter.hasNext()) {
  55. Map.Entry entry = (Map.Entry) iter.next();
  56. String inputName = (String) entry.getKey();
  57. String inputValue = (String) entry.getValue();
  58. if (inputValue == null) {
  59. continue;
  60. }
  61. strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
  62. strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n");
  63. strBuf.append(inputValue);
  64. }
  65. out.write(strBuf.toString().getBytes());
  66. }
  67. // file
  68. if (fileMap != null) {
  69. Iterator iter = fileMap.entrySet().iterator();
  70. while (iter.hasNext()) {
  71. Map.Entry entry = (Map.Entry) iter.next();
  72. String inputName = (String) entry.getKey();
  73. String inputValue = (String) entry.getValue();
  74. if (inputValue == null) {
  75. continue;
  76. }
  77. File file = new File(inputValue);
  78. String filename = file.getName();
  79.  
  80. //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
  81. contentType = new MimetypesFileTypeMap().getContentType(file);
  82. //contentType非空采用filename匹配默认的图片类型
  83. if(!"".equals(contentType)){
  84. if (filename.endsWith(".png")) {
  85. contentType = "image/png";
  86. }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
  87. contentType = "image/jpeg";
  88. }else if (filename.endsWith(".gif")) {
  89. contentType = "image/gif";
  90. }else if (filename.endsWith(".ico")) {
  91. contentType = "image/image/x-icon";
  92. }
  93. }
  94. if (contentType == null || "".equals(contentType)) {
  95. contentType = "application/octet-stream";
  96. }
  97. StringBuffer strBuf = new StringBuffer();
  98. strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
  99. strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n");
  100. strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
  101. out.write(strBuf.toString().getBytes());
  102. DataInputStream in = new DataInputStream(new FileInputStream(file));
  103. int bytes = 0;
  104. byte[] bufferOut = new byte[1024];
  105. while ((bytes = in.read(bufferOut)) != -1) {
  106. out.write(bufferOut, 0, bytes);
  107. }
  108. in.close();
  109. }
  110. }
  111. byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
  112. out.write(endData);
  113. out.flush();
  114. out.close();
  115. // 读取返回数据
  116. StringBuffer strBuf = new StringBuffer();
  117. BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  118. String line = null;
  119. while ((line = reader.readLine()) != null) {
  120. strBuf.append(line).append("\n");
  121. }
  122. res = strBuf.toString();
  123. reader.close();
  124. reader = null;
  125. } catch (Exception e) {
  126. System.out.println("发送POST请求出错。" + urlStr);
  127. e.printStackTrace();
  128. } finally {
  129. if (conn != null) {
  130. conn.disconnect();
  131. conn = null;
  132. }
  133. }
  134. return res;
  135. }

本文代码学习自:https://blog.csdn.net/Icywind1/article/details/85628099 ,csdn的代码格式让人抓狂,特复制一份。

java发送post请求,使用multipart/form-data的方式传递参数,可实现服务器间文件上传功能(转)的更多相关文章

  1. 【转】HTTP请求中的form data和request payload的区别

    jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的,比如用$.ajax方法发送请求时(data参数是一个JSON.stringify()处理后的字符串, ...

  2. [转]HTTP请求中的form data和request payload的区别

    本文转自:http://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的 ...

  3. [整理]Ajax Post请求下的Form Data和Request Payload

    Ajax Post请求下的Form Data和Request Payload 通常情况下,我们通过Post提交表单,以键值对的形式存储在请求体中.此时的reqeuest headers会有Conten ...

  4. HTTP请求中的form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  5. HTTP 请求中的 Form Data 与 Request Payload 的区别

    HTTP 请求中的 Form Data 与 Request Payload 的区别 前端开发中经常会用到 AJAX 发送异步请求,对于 POST 类型的请求会附带请求数据.而常用的两种传参方式为:Fo ...

  6. Java发送Http请求并获取状态码

    通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...

  7. 通过java发送http请求

    通常的http请求都是由用户点击某个连接或者按钮来发起的,但是在一些后台的Java程序中需要发送一些get或这post请求,因为不涉及前台页面,该怎么办呢? 下面为大家提供一个Java发送http请求 ...

  8. Java发送HTTPS请求

    前言 上篇文章介绍了 java 发送 http 请求,大家都知道发送http是不安全的 .我也是由于对接了其他企业后总结了一套发送 https的工具.大家网上找方法很多的,但是可不是你粘过来就能用啊, ...

  9. 使用Java发送Http请求的内容

    公司要将自己的产品封装一个WebService平台,所以最近开始学习使用Java发送Http请求的内容.这一块之前用PHP的时候写的也比较多,从用最基本的Socket和使用第三方插件都用过. 学习了J ...

随机推荐

  1. 第一章 XAML概览

    1.1 XAML是什么? XAML是eXtensible Application Markup Language的英文缩写,相应的中文名称为可扩展应用程序标记语言.也就是说在开发一个应用程序时,我们可 ...

  2. python简明教程代码

    #!user/bin/env python #-*- coding:utf-8 -*- # code001 print('hello world') (only one quotation mark, ...

  3. 用c语言创建双向环形链表

    作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表.这个也是理解和使用c指针的一项基本功. #include<...>//头文件省略 typedef ...

  4. 【java】之算法复杂度o(1), o(n), o(logn), o(nlogn)

    在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间复杂 ...

  5. rabbitMQ 在 windows 64位环境下无法启动(提示乱码)的解决方法

    执行start命令时,提示乱码 解决方法: Set the environment variable “RABBITMQ_BASE” to “c:\rabbitmq”, uninstall the s ...

  6. Kong(V1.0.2)Network & Firewall

    介绍 在本节中,您将找到关于Kong推荐的网络和防火墙设置的摘要.PortsKong使用多个连接用于不同的目的. 代理 管理api Proxy 代理端口是Kong接收传入流量的地方.有两个端口具有以下 ...

  7. sql 存储过程和触发器

    mysql----------------------------------------------------------------------------------------------- ...

  8. TensorFlow的介绍和安装

    TensorFlow概要 由google Brain开源,设计初衷是加速机器学习的研究,2015年11月在GitHub上开源,2016年4月分布式版本,2017年发布了1.0版本,趋于稳定. Tens ...

  9. nil/Nil/NULL/NSNull

    nil/Nil/NULL/NSNull的区别 一个简单的小例子: NSObject *obj = nil; NSLog(@"%@",obj); =>null NSObject ...

  10. TMS320F28335系列芯片地址映射表

    本表非官方资料,纯属个人学习笔记,欢迎补充 本表非官方资料,纯属个人学习笔记,欢迎补充 本表非官方资料,纯属个人学习笔记,欢迎补充 开始地址 长度 名称 物理器件 程序 数据 只读 Protected ...