问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Java利用HttpURLConnection发送post请求上传文件

发布网友 发布时间:2022-12-29 06:48

我来回答

1个回答

热心网友 时间:2023-10-25 18:32

  在页面里实现上传文件不是什么难事 写个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 *** = new StringBuilder();

   *** append( );

   *** append(BOUNDARY);

   *** append( \r\n );

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

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

  byte[] data = *** 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();

  }

lishixin/Article/program/Java/hx/201311/27114
    声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
    E-MAIL:11247931@qq.com
    古天乐的资料!!! 胆结石可以喝柠檬蜂蜜水吗 柠檬对结石有什么作用 胆结石可以吃柠檬吗 江西有哪些风景 行政处罚对象能不能是分公司 分公司是否能作为被行政处罚的对象 分享20份亚马逊运营过程中常用邮件回复模板 2024年上半年自考报名时间 22年辽宁省自考延期怎么退费 索尼x91k1玩ps5的最好画面设置 csc是哪个厂牌 平煤现在为什么不解封 去平煤神马集团容易吗 是桃桃呀被抓了吗 帮桃是什么 什么是规范字 关于规范字的介绍 规范汉字详细资料大全 问一下,谁知道怎么在手机上改QQ会员生日气泡,跪求各位知道答案的大神 QQ会员生日寿星聊天气泡怎么设置 in order to ,in order that ,so that ,so as to,to do他们有什么区别,再造几个句子 in order to 和so as to 的否定是什么?在to前面加not? 英语中的词缀和词根怎么区分,能举个例子或通俗的给解释下么。谢谢了。 有关于网络有益的资料吗我们开辨论会 梦见大猫小猫有什么预兆?是什么意思? 从天津到丽江一个人,费用大概得多少啊 制作树莓派镜像后的U盘为什么只有57M,U盘在制作之前是8g的 没有开封的洗手液过期还能用吗 洗手液过期两个月还能用吗 洗手液过期能用吗? 京官[jīng guān]什么意思?近义词和反义词是什么?英文翻译是什么? 昨来[zuó lái]什么意思?近义词和反义词是什么?英文翻译是什么? 高中语文文言文琵琶行 韩愈《南山诗》原文及翻译赏析 韩愈列传文言文的翻译节选 出表师文言文翻译 苏轼《如梦令·有寄》原文及翻译赏析 怎么防止睡觉嘴巴张开 除夕发朋友圈的心情说说除夕怎么发朋友圈 4.5公里是几里地 6千步等于多少米 我家的燃气灶经常打不着火,而且煤气味太重,有谁知道哪里有专业维修燃气灶的?骗人的就算了 什么时候用被子? 长春中东17.5影城的会员卡在新天地17.5影城能用吗? 四年级写作文描写什么花的勇气 关于花草勇气的诗句 花的勇气四字成语 关于花儿勇气的诗句 四年级写作文描写菊花的勇气 葬礼发朋友圈选择什么图片
    • 焦点

    最新推荐

    猜你喜欢

    热门推荐