Java实现以form-data形式文件上传到服务器

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

Java实现以form-data形式文件上传到服务器文章来源地址https://www.toymoban.com/news/detail-637843.html

package com.joolun.cloud.mall.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;

@Slf4j
public class HttpFileUtil {
		/**
		 * 以post方式调用第三方接口,以form-data 形式  发送 MultipartFile 文件数据
		 * @param url  post请求url
		 * @param fileParamName 文件参数名称
		 * @param multipartFile  文件
		 * @param paramMap  文件之外其他参数
		 */
		public static String doPostFormData(String url, String fileParamName, MultipartFile multipartFile, Map<String, String> paramMap) {
			log.info("文件参数名称"+fileParamName);
			// 创建Http实例
			CloseableHttpClient httpClient = HttpClients.createDefault();
			// 创建HttpPost实例
			HttpPost httpPost = new HttpPost(url);
			// 请求参数配置
			RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000)
					.setConnectionRequestTimeout(10000).build();
			httpPost.setConfig(requestConfig);
			//请求头设置
			try {
				MultipartEntityBuilder builder = MultipartEntityBuilder.create();
				builder.setCharset(StandardCharsets.UTF_8);
				builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
				String fileName = multipartFile.getOriginalFilename();
				// 文件流
				builder.addBinaryBody(fileParamName, multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
				//表单中其他参数,如果没有其他参数可以注释该部分
				for(Map.Entry<String, String> entry: paramMap.entrySet()) {
					builder.addPart(entry.getKey(),new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
				}
				log.info("builder"+builder);
				HttpEntity entity = builder.build();
				httpPost.setEntity(entity);

				log.info("请求url:"+url);
				log.info("请求参数:"+paramMap.toString());
				// 执行提交
				HttpResponse response = httpClient.execute(httpPost);
				if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					// 返回
					String res = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
					log.info("请求返回数据"+res);
					JSONObject resJson= JSON.parseObject(res);
					if ("200".equals(resJson.get("code").toString())) {
						JSONObject data = (JSONObject) resJson.get("data");
						return data.get("fileUrl").toString();
					}
					return res;
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (httpClient != null) {
					try {
						httpClient.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			return null;
		}
	}

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

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

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

相关文章

  • python + request实现multipart/form-data请求上传文件

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

    2024年02月11日
    浏览(30)
  • Java以form-data(表单)的形式调用第三方接口

    之前写的调用第三方接口: Java使用原生API调用第三方接口 但是其中只包含了简单的接口(传递数据为JSON)调用。也就是 Content-Type 的值是设置成: 当第三方接口需要包含 文件 类型的参数,我们要设置成以 表单形式 提交,就要那么该属性就应该设置成 表示是以 表单形式

    2024年02月02日
    浏览(44)
  • [micropython k210] 基于 Socket 实现 MicroPython 的 HTTP 上传文件(multipart/form-data)

    下述内容需要具备 HTTP 的基础知识,如果不知道的可以过一遍 HTTP 协议详解 继上次在 K210 实现 HTTP Download 文件(https 也支持辣),现在就来说说直接基于 socket 的上传文件实现吧。 首先准备一个 Server 文件服务器的 CPython 代码,这个是再简单不过了。 可以看到实现处理了一个

    2024年02月08日
    浏览(36)
  • 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日
    浏览(42)
  • 上传文件.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日
    浏览(32)
  • 解锁新技能《springboot基于表单multipart/form-data的文件上传》

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

    2024年02月13日
    浏览(34)
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返回结果。考虑使用python的requests,一般这种查询或上传文件的接口都是post请求。

    2024年02月12日
    浏览(34)
  • 上传文件后报错:IOFileUploadException: Processing of multipart/form-data request failed.

    原因:内存空间不足 通过df -h /usr/lacal 命令查看内存空间使用情况 可以清除下内存空间的使用,或者重新上传到其他的路径上。

    2024年02月16日
    浏览(29)
  • 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日
    浏览(23)
  • postman form-data传参java实现

    java实现: 第二种方式: 导入依赖:

    2024年02月12日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包