知识大全 Java利用HttpURLConnection发送post请求上传文件

Posted 文件

篇首语:万事须己运,他得非我贤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java利用HttpURLConnection发送post请求上传文件相关的知识,希望对你有一定的参考价值。

Java利用HttpURLConnection发送post请求上传文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在页面里实现上传文件不是什么难事 写个form 加上enctype = multipart/form data 在写个接收的就可以了 没什么难的 如果要用 HttpURLConnection来实现文件上传 还真有点搞头 : )

   先写个servlet把接收到的 HTTP 信息保存在一个文件中 看一下 form 表单到底封装了什么样的信息

  Java代码

  public void doPost(HttpServletRequest request HttpServletResponse response)

  throws ServletException IOException

  //获取输入流 是HTTP协议中的实体内容

  ServletInputStream  in=request getInputStream();

  //缓冲区

  byte buffer[]=new byte[ ];

  FileOutputStream out=new FileOutputStream( d:\\\\test log );

  int len=sis read(buffer );

  //把流里的信息循环读入到file log文件中

  while( len!= )

  out write(buffer len);

  len=in readLine(buffer );

  

  out close();

  in close();

  

  来一个form表单

  <form name= upform action= upload do method= POST

  enctype= multipart/form data >

  参数<input type= text name= username /><br/>

  文件 <input type= file name= file /><br/>

  文件 <input type= file name= file /><br/>

  <input type= submit value= Submit />

  <br />

  </form>

  假如我参数写的内容是hello word 然后二个文件是二个简单的txt文件 上传后test log里如下

  Java代码

   da e c

  Content Disposition: form data; name= username

  hello word

   da e c

  Content Disposition: form data; name= file ; filename= D:\\haha txt

  Content Type: text/plain

  haha

  hahaha

   da e c

  Content Disposition: form data; name= file ; filename= D:\\huhu txt

  Content Type: text/plain

  messi

  huhu

   da e c

  研究下规律发现有如下几点特征

   第一行是 d b bc 作为分隔符 然后是 \\r\\n 回车换行符 这个 d b bc 分隔符浏览器是随机生成的

   第二行是Content Disposition: form data; name= file ; filename= D:\\huhu txt ;name=对应input的name值 filename对应要上传的文件名(包括路径在内)

   第三行如果是文件就有Content Type: text/plain 这里上传的是txt文件所以是text/plain 如果上穿的是jpg图片的话就是image/jpg了 可以自己试试看看

  然后就是回车换行符

   在下就是文件或参数的内容或值了 如 hello word

   最后一行是 da e c 注意最后多了二个 ;

  有了这些就可以使用HttpURLConnection来实现上传文件功能了

  Java代码 public void upload()

  List<String> list  = new ArrayList<String>();  //要上传的文件名 如 d:\\haha doc 你要实现自己的业务 我这里就是一个空list

  try

  String BOUNDARY = d a d c ; // 定义数据分隔线

  URL url = new URL( );

  HttpURLConnection conn = (HttpURLConnection) url openConnection();

  // 发送POST请求必须设置如下两行

  conn setDoOutput(true);

  conn setDoInput(true);

  conn setUseCaches(false);

  conn setRequestMethod( POST );

  conn setRequestProperty( connection Keep Alive );

  conn setRequestProperty( user agent Mozilla/ (patible; MSIE ; Windows NT ; SV ) );

  conn setRequestProperty( Charsert UTF );

  conn setRequestProperty( Content Type multipart/form data; boundary= + BOUNDARY);

  OutputStream out = new DataOutputStream(conn getOutputStream());

  byte[] end_data = ( \\r\\n + BOUNDARY + \\r\\n ) getBytes();// 定义最后数据分隔线

  int leng = list size();

  for(int i= ;i<leng;i++)

  String fname = list get(i);

  File file = new File(fname);

  StringBuilder sb = new StringBuilder();

  sb append( );

  sb append(BOUNDARY);

  sb append( \\r\\n );

  sb append( Content Disposition: form data;name=\\ file +i+ \\ ;filename=\\ + file getName() + \\ \\r\\n );

  sb append( Content Type:application/octet stream\\r\\n\\r\\n );

  byte[] data = sb toString() getBytes();

  out write(data);

  DataInputStream in = new DataInputStream(new FileInputStream(file));

  int bytes = ;

  byte[] bufferOut = new byte[ ];

  while ((bytes = in read(bufferOut)) != )

  out write(bufferOut bytes);

  

  out write( \\r\\n getBytes()); //多个文件时 二个文件之间加入这个

  in close();

  

  out write(end_data);

  out flush();

  out close();

  // 定义BufferedReader输入流来读取URL的响应

  BufferedReader reader = new BufferedReader(new InputStreamReader(conn getInputStream()));

  String line = null;

  while ((line = reader readLine()) != null)

  System out println(line);

  

   catch (Exception e)

  System out println( 发送POST请求出现异常! + e);

  e printStackTrace();

  

cha138/Article/program/Java/hx/201311/27114

相关参考

知识大全 Java 发Post请求实例程序代码

Java发Post请求实例程序代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //说明使用j

知识大全 Java发邮件(email.jar)的方法

Java发邮件(email.jar)的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我想在

知识大全 Java利用Zxing生成二维码

Java利用Zxing生成二维码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java利用Zx

知识大全 利用 Java 存储过程简化数据库操作

利用Java存储过程简化数据库操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用Java存

知识大全 Java利用smslib发送短信

Java利用smslib发送短信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自己写一个小程序

知识大全 利用Java获取本机mac地址

利用Java获取本机mac地址  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  publicsta

知识大全 看你以前发的一个帖子, 我也想做SOHO程序员,以前学过JAVA,你现在做SOHO了吗

看你以前发的一个帖子,我也想做SOHO程序员,以前学过JAVA,你现在做SOHO了吗  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内

知识大全 利用Java实现串口全双工通讯

利用Java实现串口全双工通讯  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一个嵌入式系统通常

知识大全 利用DES加密算法保护Java源代码

利用DES加密算法保护Java源代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java语言

知识大全 Java 中利用管道实现线程间的通讯

Java中利用管道实现线程间的通讯  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java语言