java后台发起上传文件的post请求(http和https)_java httpurlconnection post传文件和文件名-程序员宅基地

技术标签: java  java之路  

一、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,是张图片,附上代码的截图:

 

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

 

二、https post

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

 

 

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

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

其他的代码就和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>

编写的代码如下:

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yjclsx/article/details/70675057

智能推荐

matlab中fliter函数,用C语言实现MATLAB中Filter()函数-程序员宅基地

文章浏览阅读445次。#include#define Width 3 //滤波器门宽#define Inputlength 20//输入信号的个数void myfilter(int, float *, float *, int, float *, float *);int main() {int j,k;float a[3] = { 1,-1.5,0.25 };//分母系数向量,可自行设置float b[3] = { ..._用之前的乘积和减去分母系数与过去输出函数的乘积差

编程书籍分享(持续更新....)-程序员宅基地

文章浏览阅读665次,点赞4次,收藏7次。本页面分享IT技术书籍,所有的书籍均是完整的pdf,所有书籍都有看过(大部分没看完),都是我认为非常不错的书籍,分享给大家,放在csdn下载。下载积分都设置为1(csdn现在没办法设置成不用积分下载),但如果下载人数太多,csdn会自动把积分调高,如果没有积分的可以在下方留email,我会尽快发给你。课程书籍编程开发C++Linux编程Windows编程汇编PythonJa...

Linux内核笔记(驱动篇)之 【MMC里的轮询机制】_linux mmc驱动-程序员宅基地

文章浏览阅读208次。最近遇到客户提的一个问题,大概意思是他们的SDIO Wi-Fi在卸载Wi-Fi驱动后再加载就检测不到Wi-Fi设备了。从他的问题看大概是热插拔有问题。_linux mmc驱动

android入门之Activity Recents screen-程序员宅基地

文章浏览阅读252次。文档:https://developer.android.com/guide/components/activities/recents1.简介最近的屏幕是一个系统级 UI,也称为概览屏幕、最近的任务列表或最近的应用程序列出了最近访问的活动和任务。用户可以在列表中导航并选择恢复任务,或者从列表中移除。最近屏幕使用以文档为中心的模型(在 Android 5.0 中引入)其中包含不同文档的同一活动的多个实例可能在最近屏幕中显示为任务。Google Drive 可能对每一个文档都有_recents screen

ERROR: cannot launch node of type [map_server/map_server]: map_server_[error] [1688396936.736257295]: map_server excepti-程序员宅基地

文章浏览阅读2.2k次。如上图所示,版本号为:noetic根据ros版本号,进行安装:sudo apt-get install ros-noetic-map-server 将noetic换成你的版本号_[error] [1688396936.736257295]: map_server exception: operator[] call on a s

mariadb用户群体mysql_mysql(mariadb)新建用户及用户授权管理-程序员宅基地

文章浏览阅读54次。仅新建一个newuser用户方法一:MariaDB [(none)]> create user newuser@localhost identified by ‘123456’;Query OK, 0 rows affected (0.22 sec)MariaDB [(none)]> select user from mysql.user;+———+| user |+———+| ..._mariadb [(none)]> grant all privileges on *.* to root@'%' identified by '123

随便推点

外网电脑访问内网linux服务器(设置路由端口映射)_校外如何访问linux服务器-程序员宅基地

文章浏览阅读1.6w次。在日常工作中,我们往往遇到这种情况:我们在外网的一个客户端需要远程控制一个内网的linux服务器。要实现合格功能很简单。1,局域网内客户端登陆linux服务器 只需在客户端下载一个putty软件,打开putty后,在Host Name(or IP Address)处输入服务器的名字或者局域网内为服务器分配的IP地址即可(端口号为22,连接类型为SSH)。_校外如何访问linux服务器

地震信号分析与处理系统设计(matlab/simulink/labview)_地震信号检测与处理-程序员宅基地

文章浏览阅读1.3k次。地震信号分析总体方案设计;查阅资料,分析地震勘探原始地震信号的特点,绘制出其时域波形并加以分析;地震信号的频谱分析:查阅资料,分析不同类型的地震信号的频域特征,对地震信号做谱分析,绘制频域波形图;设计相应的滤波器去除地震信号的噪声:根据地震信号的频域特征,设计相应滤波器去除噪声;地震信号处理系统的时频分析:采用短时傅里叶变换对地震信号进行时频分析;地震信号处理系统GUI用户界面设计:针对设计的地震信号分析系统,利用GUI设计图形用户界面,实现系统的相关功能;基于LabView仿真。_地震信号检测与处理

第07课:动手实战基于 ML 的中文短文本聚类-程序员宅基地

文章浏览阅读1k次。关于文本聚类,我曾在 Chat《NLP 中文文本聚类之无监督学习》中介绍过,文本聚类是将一个个文档由原有的自然语言文字信息转化成数学信息,以高维空间点的形式展现出来,通过计算哪些点距离比较近,从而将那些点聚成一个簇,簇的中心叫做簇心。一个好的聚类要保证簇内点的距离尽量的近,但簇与簇之间的点要尽量的远。如下图,以 K、M、N 三个点分别为聚类的簇心,将结果聚为三类,使得簇内点的距离尽量的近,但簇与...

Spring中的BeanFactory与FactoryBean_beanfactory添加bean-程序员宅基地

文章浏览阅读315次。Spring中的BeanFactory与FactoryBean_beanfactory添加bean

android开发边框阴影,Android 卡片边框模糊阴影效果实现-程序员宅基地

文章浏览阅读785次。1. 使用标签内写多个套标签实现android:bottom="2dp"android:left="2dp"android:right="2dp"android:top="0dp" />android:bottom="2dp"android:left="2dp"android:right="2dp"android:top="0dp" />android:bottom="2dp"andr..._android 卡片阴影效果

SQL语句中单引号、双引号和反引号的区分_sql中区分引号吗-程序员宅基地

文章浏览阅读850次。单引号 ’ 和双引号 “在标准 SQL 中,字符串使用的是单引号。如果字符串本身也包括单引号,则使用两个单引号(注意,不是双引号,字符串中的双引号不需要另外转义)。MySQL对 SQL 的扩展,允许使用单引号和双引号两种。反引号 `反引号一般在Esc键的下方,和~在一起。它是为了区分MySQL的保留字与普通字符而引入的符号。 create table desc 报错 create t..._sql中区分引号吗

推荐文章

热门文章

相关标签