问答文章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
Java利用HttpURLConnection发送post请求上传文件

List&lt;String&gt; list = new ArrayList&lt;String&gt;(); //要上传的文件名 如 d:\haha doc 你要实现自己的业务 我这里就是一个空list try { String BOUNDARY = d a d c ; // 定义数据分隔线 URL url = new URL( );HttpURLConnection conn = (HttpURLConnection) url openConnection();// ...

HttpURLConnection.setRequestProperty的使用

HttpURLConnection类在Java编程中经常用于发送HTTP请求,特别是POST方法。本文以PostExample为例,展示了如何利用setRequestProperty方法进行设置。首先,创建一个URL对象,指向需要请求的CGI脚本"www.***.com/cgi-bin/names.cgi"。接着,通过url.openConnection()获取连接,并将其转换为HttpURLConnection对象。

URLConnection

URLConnection是Java中用于与URL指定资源建立活动连接的抽象类,它提供了对服务器交互的更高级控制。通过它,可以发送POST、PUT等HTTP请求并获取服务器响应的详细信息。与URL类不同,URLConnection允许检查发送的首部信息,并据此作出响应。在java.net包中,我们直接操作的是抽象的URLConnection,具体实现由sun....

java调用http接口时怎么传入整型

1、通过将整型变量intValue转换为字符串,并将其附加到URL的查询字符串中,从而将整型数据作为URL参数传递给HTTP接口。2、使用HttpURLConnection类创建了一个HTTP连接,并使用POST方法向HTTP接口发送请求。将整型变量intValue转换为JSON字符串,并将其作为请求体发送给HTTP接口,即可。

java上传文件后用户是如何访问的(java实现文件上传的三种方式)

//假设你把文件放到webroot底下的java文件里面 url=newURL(destUrl);httpUrl=(HttpURLConnection)url.openConnection();//连接指定的网络资源 httpUrl.connect();//获取网络输入流 bis=newBufferedInputStream(httpUrl.getInputStream());...得到流后下面你自己想怎么操作就怎么操作了 对于怎么得到资源的...

JAVA以POST方式提交XML获取返回值(返回格式为XML)

URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setRequestMethod(“POST”);OutputStream outputStream = httpUrlConn.getOutputStream();outputStream.write(xml);outputStream.close();InputStream inputStream = httpUrlConn....

java HttpPost怎么传递参数

// Post请求的url,与get不同的是不需要带参数 URL postUrl = new URL("http://www.xxxxxxx.com");// 打开连接 HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();// 设置是否向connection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true conne...

java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题_百...

试试下面两种思路 可以分批次请求,一次返回一部分。 一般来说10M以内都是可以接受 服务器端返回一个文件,客户端直接接受文件。(这里接受文件肯定要用流的形式,不能用byte数组)

JAVA 怎么实现HTTP的POST方式通讯,以及HTTPS方式传递

如果有点通讯知识,就该知道这些只是socket通讯中的报文不同而已。通过socket通讯都能实现。现在java自身提供了封装好的的接口。apache也提供了httpclient.

如何实现java解析网络协议报文

HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置为POST情 conn.setRequestMethod("POST");// 发送POST请求必须设置如下两行 conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 设置请求头参数 conn.setRequestProperty("connection", "Keep-Alive"...

post上传文件带请求体 Javapost上传附件 vb上传文件post post上传参数和文件 易语言post可以上传文件嘛 json上传文件 java 上传文件 http的post请求 post传文件
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
鹦鹉鱼缸养什么最好最旺财 怎么养好热带鱼红鹦鹉与地图ɱ 5人投资15万买了一套房有出5万的有出4万的有出2万的,房子卖了10万元,5... 为什么热带鱼鹦鹉鱼与地图鱼不能混养?谢谢! 有什么平价切好用的BB 霜? 卧室可以摆放千年木吗? 自然堂bb霜多少钱一瓶?修饰毛孔素颜肌 你好,我在楼里开了一个美容私人工作室,我需要办营业执照吗? 《行政职业能力测验》是考些什么东西的 需要从哪方面着手找资料 详情见... 行政职业能力测验历年难题材详解目录 索尼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影城能用吗? 四年级写作文描写什么花的勇气 关于花草勇气的诗句 花的勇气四字成语 关于花儿勇气的诗句 四年级写作文描写菊花的勇气 葬礼发朋友圈选择什么图片