java后台发起上传文件的post请求(http和https)

一、httppost对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype=”multipart/form-data”,在写个接收的就可以了,没什么难的。如:<!DOCTYPEhtml> <html> <head> <title>HelloWorld!</titl…

大家好,又见面了,我是你们的朋友全栈君。

一、http post

对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype = “multipart/form-data”,在写个接收的就可以了,没什么难的。如:

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>Hello World!</title>  
  5. </head>  
  6. <body>  
  7.     <form method=”POST” enctype=”multipart/form-data” action=”/XXX”>   
  8.            <p>文件1:<input type=”file” name=”file1″ /></p>  
  9.            <p>文件:<input type=”file” name=”file” /></p>  
  10.            <p>其他信息:<input name=”luid” /></p>  
  11.            <p><input type=”submit” value=”上传” /></p>  
  12.     </form>
  13. </body>  
  14. </html>  

 

如果要用java.net.HttpURLConnection来实现文件上传,还真有点搞头,实现思路和具体步骤就是模拟页面的请求,页面发出的格式如下:

  1. —————————–7da2e536604c8  
  2. Content-Disposition: form-data; name=”luid”  
  3.   
  4. 123  
  5. —————————–7da2e536604c8  
  6. Content-Disposition: form-data; name=”file1″; filename=”D:\haha.txt”  
  7. Content-Type: text/plain  
  8.   
  9. haha  
  10.   hahaha  
  11. —————————–7da2e536604c8  
  12. Content-Disposition: form-data; name=”file”; filename=”D:\huhu.png”  
  13. Content-Type: application/octet-stream  
  14.   
  15. 这里是图片的二进制数据 
  16. —————————–7da2e536604c8–

上面username是form表单中的文本参数,值为123,file1是form表单中上传的文本文件。file是form表单中上传的其他类型的文件,他们的Content-Type不一样。

知道了这些,就可以编写代码来模拟了,这里只上传一个文件file,是张图片,附上代码的截图:

java后台发起上传文件的post请求(http和https)

 

java后台发起上传文件的post请求(http和https)

以上的空行”\r\n”是比较严格的,要换行或者换两行,都是根据格式来的。

 

二、https post

一般都是http的请求,但现在也有越来越多的外部接口采用https的方式来调用。比如这次工作中需要调用的FaceId他们的身份证识别接口,这个接口就是https的,而且传递的参数里还需要身份证照片,这明显是个文件。如下:

 

java后台发起上传文件的post请求(http和https)

 

java后台发起https的文件上传请求的原理以及整个步骤和http的基本一致,只是这次的URLConnection是HttpsURLConnection,而且由于https的请求需要签名等安全认证,所以会在设置HttpsURLConnection时需要多设置两个属性,如下的setSSLSocketFactory()和setHostnameVerifier():

java后台发起上传文件的post请求(http和https)

所需要的TrustAnyTrustManager类和TrustAnyHostnameVerifier类代码如下:

java后台发起上传文件的post请求(http和https)

其他的代码就和HttpURLConnection的一样了。

 

以上的代码都是使用JDK自带的net工具类,然后模拟页面的form发出的请求来完成的,如果想使用HttpClient来完成发送请求也是可以的,并且更加简单明了,不需要自己写模拟的步骤。因为是第三方工具包,需引入对应jar包:

<dependency> 

         <groupId>org.apache.httpcomponents</groupId> 

          <artifactId>httpclient</artifactId> 

         <version>4.5.2</version>         

</dependency> 

<dependency> 

         <groupId>org.apache.httpcomponents</groupId> 

          <artifactId>httpmime</artifactId> 

         <version>4.5.2</version>         

  </dependency>

编写的代码如下:

java后台发起上传文件的post请求(http和https)

以上代码都是经过测试的测试代码,你可以自己封装好以供自己今后使用(ps:别想复制,代码都是图片,因为我在沙盒内,代码复制不出来0.0)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125999.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10修改视频默认播放器_win10无法更改默认播放器

    win10修改视频默认播放器_win10无法更改默认播放器你要用到WindowsPowerShell,它是win10系统自带的一个应用,要打开它,就单击开始菜单中的“所有应用”,然后找到WindowsPowerShell的文件夹,右键单击WindowsPowerShell(注意不是WindowsPowerShellISE),然后单击以管理员身份运行,就打开了。输入以下:get-appxpackage*zunevideo*|r

    2022年9月1日
    4
  • 电子时钟代码

    电子时钟代码/*电子时钟总体样式设置*/#clock{width:800px;font-size:80px;font-weight:bold;color:red;text-align:center;margin:20px;}/*时分秒数字区域的样式设置*/.box1{margin-right:10px;width:100px;height:100px;line-height:100px;…

    2022年6月28日
    44
  • ubuntu系统查看gcc版本及版本切换[通俗易懂]

    ubuntu系统查看gcc版本及版本切换[通俗易懂]写在前面:自己的测试环境是Ubuntu16.04,安装了gcc-5、gcc-7,通过下面的方式从实现默认的gcc-5切换到gcc-7,亲测有效~~1.查看自己当前的gcc版本gcc-v通过下图的最后一行可以得到,这里电脑当前gcc的版本是5.42.安装另一个版本gcc我这里安装的是gcc-7sudoadd-apt-repositoryppa:ubuntu-toolch…

    2022年6月26日
    158
  • 数据库建立

    数据库建立1, 在我们写完计划表后开始建立数据库,数据库的建立不是说建立完了就可以了,到后面是需要不断地改善的,因为前期的数据我们可能列举出表时不够完整,或者表与表之间的关系链接错误,重复。2, 随着项目的功能实现,渐渐的数据库的数据显示出不足,我们就要进行改善1, 数据库的建立要先对项目的功能有足够的理解,要熟悉项目,把项目的表列举出来,那些数据是属于那个表的,一个表里面需要获取到那些表的信息,确定…

    2022年7月24日
    7
  • toast弹窗什么意思_app加弹窗软件

    toast弹窗什么意思_app加弹窗软件//界面toast提示/*使用方法Toast(‘这是一个弹框’,2000)*/functionToast(msg,duration){ duration=isNaN(duration)?3000:duration; varm=document.createElement(‘div’); m.innerHTML=msg; m.style.cssText=…

    2022年9月24日
    1
  • win server 2008 R2 支持[通俗易懂]

    win server 2008 R2 支持[通俗易懂]win server 2008 R2 支持

    2022年4月20日
    77

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号