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)!

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mysql基本命令

    mysql基本命令这里把自己学的mysql数据库的知识总结一下,当是给自己复习一遍,也是方便以后查询安装和配置mysql就不说了,可以借鉴这位博友的安装过程https://www.cnblogs.com/by330

  • 1.两数之和-Python-LeetCode

    1.两数之和-Python-LeetCode刚开始接触算法方面,好多都不懂,打算每刷一题就整理一下题目:给定一个整数数列,找出其中和为特定值的那两个数。你可以假设每个输入都只会有一种答案,同样的元素不能被重用。示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]解法一:.刚开始看到的的时候,第一个想到的就是用一个嵌套循环把n…

  • 学生信息管理系统的用例图和图书管理系统系统分析及用例图[通俗易懂]

    学生信息管理系统的用例图和图书管理系统系统分析及用例图[通俗易懂]练习一:请画出学生信息管理系统的用例图“学生信息管理系统”功能性需求包括以下内容:      (1)系统管理员登录后可以对班级的基本信息进行增加、删除、修改、查询等操作。学校领导登录后可以对班级基本信息进行查询操作。      (2)教师登录后可以对学生的考试成绩进行录入、删除、修改、查询等操作。学生登录后可以对考试成绩进行查询操作。      (3)学生登录后可以了解所有

  • Drupal安装说明。

    Drupal安装说明。果冻整理的安装过程:1、安装AppServ,一路Next,没有特别要注意的地方,很快安装完毕。2、解压缩drupal压缩包,放到C:\AppServ\www\drupal。3、访问网址http://localhost/drupal即可开始安装。4、选择英文版安装,出现提示,按照提示把复制文件./sites/default/default.settings.phpfilet…

  • 编译原理文法详解_编译原理为什么存在递归文法

    编译原理文法详解_编译原理为什么存在递归文法引言学完了词法分析,我们知道词法分析器将正则表达式转换成词法单元流,但对于这个记号流我们不知道是否能由正确的文法产生,因此我们需要通过语法分析器来检测其合法性。语法分析器的输出是一棵语法分析树(无论显性还是隐性),并且进行一些语法纠错处理。语法分析的整个过程大概就是我们先定义一个语法,再用相应的算法来检测我们的词法单元流是否符合该语法。这里主要讨论上下文无关文法构成的语法和自顶向下、自底向上的语…

    2022年10月28日
  • 信息系统项目的范围管理论文_高级项目管理师论文

    信息系统项目的范围管理论文_高级项目管理师论文本人参加了2019年上半年信息系统项目管理师考试,目前已经通过。论文我压了2篇,但是都没有压中,考场看到题目差点吐血,还好后面按照自己的思路也顺利过关。这里和大家分享一下我的论文资料,大家可以参考。摘要20xx年x月,我作为项目经理参与了深圳市某上市公司的生产管理系统项目。该项目总投资300万人民币,建设工期为10个月,通过项目的建设,实现了该公司物料管理、库存管理、生产工单、生产计划、生产派…

发表回复

您的电子邮箱地址不会被公开。

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