Java使用HttpClient以multipart/form-data向接口上传文件

这篇具有很好参考价值的文章主要介绍了Java使用HttpClient以multipart/form-data向接口上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

对接某公司的接口,涉及到资质上传等业务。需要对接他们的上传附件接口。
JDK1.8 httpclient 4.x

封装httpclient方法

public static String postFileMultiPart(String url,Map<String, ContentBody> reqParam) throws IOException{
	CloseableHttpClient httpclient = HttpClients.createDefault();
	try {
		// 创建http
		HttpPost httppost = new HttpPost(url);
		//setConnectTimeout:设置连接超时时间,单位毫秒。setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。
		RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
		httppost.setConfig(defaultRequestConfig);
		MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
		for(Map.Entry<String,ContentBody> param : reqParam.entrySet()){
			multipartEntityBuilder.addPart(param.getKey(), param.getValue());
		}
		HttpEntity reqEntity = multipartEntityBuilder.build();
		httppost.setEntity(reqEntity);
		// 执行post请求.
		CloseableHttpResponse response = httpclient.execute(httppost);
		System.out.println("got response");
		try {
			// 获取响应实体
			HttpEntity entity = response.getEntity();
			if (entity != null) {
				return EntityUtils.toString(entity, Charset.forName("UTF-8"));
			}
		} finally {
			response.close();
		}
	} finally {
		// 关闭连接,释放资源
		try {
			httpclient.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	return null;
}

因为我方系统需要给前端提供上传接口 使用的MultipartFile来接收文件
所以这边需要MultipartFile转下File文件

public static File transferToFile(MultipartFile multipartFile) {
	//选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。
	File file = null;
	try {
		String originalFilename = multipartFile.getOriginalFilename();
		//获取文件后缀
		String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
		file = File.createTempFile(originalFilename, prefix);
		multipartFile.transferTo(file);
		//删除临时文件
		file.deleteOnExit();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return file;
}

方法调用

public RestResponse attachment(MultipartFile file) throws Exception {
	Map<String, ContentBody> reqParam = new HashMap<>();
	//普通类型
	reqParam.put("appId", new StringBody("appid", ContentType.MULTIPART_FORM_DATA));
	//文件
	reqParam.put("file", new FileBody(FileUploadUtils.transferToFile(file), ContentType.IMAGE_JPEG));
	String result = HttpClientUtil.postFileMultiPart("http://www.com/attachment", reqParam);
}

后记

一顿操作对接完事。肯定有朋友问 为什么不让前端兄弟直接对接呢。因为对接的接口有权限校验。前端直接调会有泄漏token和秘钥的风险。文章来源地址https://www.toymoban.com/news/detail-454502.html

到了这里,关于Java使用HttpClient以multipart/form-data向接口上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用postman发送请求,提示Content type ‘multipart/form-data not supported

    1、原因:后端通过@RequestBody 的方式接收参数,不能通过form-data方式传参,每一个请求必须是通过实体对象进行传参,需要改为使用json传参

    2024年01月22日
    浏览(46)
  • 理解 HTTP 中的 multipart/form-data

    HTTP 是一种基于请求-响应模型的网络通信协议,主要用于 Web 中客户端和服务器之间通信的数据传输。事实上,如今的互联网就是构建在 HTTP 之上的。基于请求-响应模式的通信方式很简单,客户端向服务器发送请求,服务器处理请求并进行响应。 HTTP 其实并不关心我们想要传

    2024年02月08日
    浏览(42)
  • postman上传文件(multipart/form-data请求)

    网页的form表单中,如果存在上传文件的表单,则需要将form标签设置enctype=\\\"multipart/form-data\\\"属性,意思是将Content-Type设置成multipart/form-data。 那么如何使用 postman发送 multipart/form-data请求呢? Content-Type: multipart/form-data; boundary= 表单中的 enctype 属性规定在发送到服务器之前应该如

    2024年02月02日
    浏览(62)
  • python + request实现multipart/form-data请求上传文件

    1、multipart/form-data介绍         multipart/form-data 是 HTTP 协议中用于上传文件的一种类型。它允许客户端向服务器发送文件以及一些额外的元数据(例如文件名、MIME 类型、图片等)。这种类型的请求不同于普通的application/x-www-form-urlencoded 格式,其中数据是在请求体中进行编

    2024年02月11日
    浏览(35)
  • Jmeter 使用multipart/form-data传递参数,后端拿不到参数数据,同样的请求,同样的参数,postman却可以

    提示:阅读本章之前,请先阅读目录 我遇到了一个怪事,就是同一个接口,同样的参数,同样的数据,postman可以请求,但是jmeter却不行,因为接口需要使用到multipart/form-data的提交方法,所以,出现这个情况,首先,察觉到该问题,主要还是因为multipart/form-data 在jmeter中,你

    2024年02月11日
    浏览(46)
  • Content type ‘multipart/form-data;boundary=解决方案

    记录一个小问题 今天在用postman调试接口,发送请求的时候没进入断点就报错\\\" Content type \\\'multipart/form-data;boundary=--------------------------xxxxxxxxxxxxx;\\\" 当时我就纳了闷了,东研究西研究的找了半天原因。 最后找了一个老师傅,一眼就看出来问题了。因为接口是别人写的,我属于后面

    2024年02月15日
    浏览(45)
  • 上传文件.HttpMediaTypeNotSupportedException:Content type ‘multipart/form-data;

    org.springframework.web.HttpMediaTypeNotSupportedException:Content type \\\'multipart/form-data;boundary=----WebKitFormBoundaryCkkfE9h3eXMf4Pw4;charset=UTF-8\\\' not supported controller方法入参问题所致 原本接口定义为 第二个参数有注解 @RequestBody,它是导致这个问题的关键!!! 解决:将@RequestBody去掉即可解决问题!再

    2024年02月14日
    浏览(43)
  • SpringBoot:使用application/octet-stream 流式上传大文件,解决Mutipartfile multipart/form-data上传产生临时文件问题

    multipart的流不是HTTPRequest的流,而是服务器的临时文件流 multipart/form-data是表单上传,接口可以从Mutipartfile对象获取输入流getInputStream,表面上看没产生临时文件 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest的getInputStream 这里面的流是从DiskFileItem(一眼磁盘)拿的

    2024年02月14日
    浏览(33)
  • 解锁新技能《springboot基于表单multipart/form-data的文件上传》

    springboot的文件上传有多种实现方案,个人比较推荐方案三通过实体类属性绑定的方式,这样可以方便文件及其关联的相关属性字段; 开源依赖pom 一、单个文件上传及其它属性字段 二、通过数组方式上传多个文件 三、通过实体类绑定方式上传文件及传递其它属性值 四、通过

    2024年02月13日
    浏览(43)
  • 前端如何上传图片给后台?如何传递 multipart/form-data 类型的数据?图片大小、格式检查?

    图片上传需要传二进制流,请求头的 content-type 类型需为 multipart/form-data,传递的格式如下图所示 前后端交互通常为: 先调用接口上传二进制流图片 然后再上传表单其他内容(第一步通常会返回后台存储的图片id,第二步会将图片id传递给后台) 注:目前我只用过以上这种方

    2024年04月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包