iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java发送form-data请求怎么实现文件上传
  • 291
分享到

Java发送form-data请求怎么实现文件上传

2023-07-02 11:07:34 291人浏览 八月长安
摘要

这篇“Java发送fORM-data请求怎么实现文件上传”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java发送form-

这篇“Java发送fORM-data请求怎么实现文件上传”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java发送form-data请求怎么实现文件上传”文章吧。

封装了以下工具类:

package com.leeyaonan.clinkz.common.util;import java.io.File;import java.io.IOException;import java.NIO.charset.StandardCharsets;import java.util.*;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;import lombok.extern.slf4j.Slf4j;import org.apache.Http.HttpEntity;import org.apache.http.client.HttpRequestRetryHandler;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.config.ReGIStry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.Socket.ConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.TrustSelfSignedStrategy;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.FileBody;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.ssl.SSLContextBuilder;import org.apache.http.util.EntityUtils;import org.springframework.util.CollectionUtils;@Slf4jpublic class HttpUtils {        private static int connectionRequestTimeout = 10000;        private static int connectTimeout = 60000;        private static int socketTimeout = 60000;        private static int maxTotal = 800;        private static int maxPerRoute = 20;    private static PoolingHttpClientConnectionManager connectionManager = null;    private static CloseableHttpClient httpClient;    public static CloseableHttpClient getClient() {        return httpClient;    }    static {        log.info("初始化http connection 连接池 ...");        try {            // 配置同时支持 HTTP 和 HTPPS            SSLContextBuilder builder = new SSLContextBuilder();            builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(builder.build());            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", sslConnectionSocketFactory).build();            connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);        } catch (Exception e) {            log.error("初始化http 连接池异常", e);            connectionManager = new PoolingHttpClientConnectionManager();        }        //连接池统一配置        connectionManager.setMaxTotal(maxTotal);        connectionManager.setDefaultMaxPerRoute(maxPerRoute);        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout).build();        //不做重试功能        HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);        httpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).setRetryHandler(retryHandler).build();        ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(1);        scheduledExecutorService.scheduleWithFixedDelay(() -> {            connectionManager.closeExpiredConnections();            connectionManager.closeIdleConnections(20, TimeUnit.SECONDS);            log.info("回收过期的http连接完成 status:{}", connectionManager.getTotalStats());        }, 30, 120, TimeUnit.SECONDS);        Runtime.getRuntime().addShutdownHook(new Thread(() -> {            log.info("关闭 httpClient 连接");            try {                if (httpClient != null) {                    httpClient.close();                }            } catch (IOException e) {                log.error("关闭 httpClient 异常", e);            }        }));    }        public static String doPostUploadFile(String url, Map<String, String> headers, File file) {        HttpPost httpPost = new HttpPost(url);        packageHeader(headers, httpPost);        String fileName = file.getName();        CloseableHttpResponse response = null;        String respContent = null;        long startTime = System.currentTimeMillis();        // 设置请求头 boundary边界不可重复,重复会导致提交失败        String boundary = "-------------------------" + UUID.randomUUID().toString();        httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);        // 创建MultipartEntityBuilder        MultipartEntityBuilder builder = MultipartEntityBuilder.create();        // 设置字符编码        builder.setCharset(StandardCharsets.UTF_8);        // 模拟浏览器        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);        // 设置边界        builder.setBoundary(boundary);        // 设置multipart/form-data流文件        builder.addPart("multipartFile", new FileBody(file));        // application/octet-stream代表不知道是什么格式的文件        builder.addBinaryBody("media", file, ContentType.create("application/octet-stream"), fileName);        HttpEntity entity = builder.build();        httpPost.setEntity(entity);        try {            response = httpClient.execute(httpPost);            if (response != null && response.getStatusLine() != null && response.getStatusLine().getStatusCode() < 400) {                HttpEntity he = response.getEntity();                if (he != null) {                    respContent = EntityUtils.toString(he, "UTF-8");                }            } else {                log.error("对方响应的状态码不在符合的范围内!");                throw new RuntimeException();            }            return respContent;        } catch (Exception e) {            log.error("网络访问异常,请求url地址={},响应体={},error={}", url, response, e);            throw new RuntimeException();        } finally {            log.info("统一外网请求参数打印,post请求url地址={},响应={},耗时={}毫秒", url, respContent, (System.currentTimeMillis() - startTime));            try {                if (response != null) {                    response.close();                }            } catch (IOException e) {                log.error("请求链接释放异常", e);            }        }    }        private static void packageHeader(Map<String, String> paramsHeads, HttpRequestBase httpMethod) {        if (!CollectionUtils.isEmpty(paramsHeads)) {            Set<Map.Entry<String, String>> entrySet = paramsHeads.entrySet();            for (Map.Entry<String, String> entry : entrySet) {                httpMethod.setHeader(entry.geTKEy(), entry.getValue());            }        }    }}

Maven依赖:

<!--http-->        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpcore</artifactId>            <version>4.4.9</version>        </dependency>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>            <version>4.5.13</version>        </dependency>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpmime</artifactId>            <version>4.5.12</version></dependency>

核心部分:

// 设置请求头 boundary边界不可重复,重复会导致提交失败String boundary = "-------------------------" + UUID.randomUUID().toString();        httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);        // 创建MultipartEntityBuilder        MultipartEntityBuilder builder = MultipartEntityBuilder.create();        // 设置字符编码        builder.setCharset(StandardCharsets.UTF_8);        // 模拟浏览器        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);        // 设置边界        builder.setBoundary(boundary);        // 设置multipart/form-data流文件        builder.addPart("multipartFile", new FileBody(file));        // application/octet-stream代表不知道是什么格式的文件        builder.addBinaryBody("media", file, ContentType.create("application/octet-stream"), fileName);        HttpEntity entity = builder.build();        httpPost.setEntity(entity);

注意:这里的builder.addPart("multipartFile", new FileBody(file));,multipartFile对应form表单的字段名称,如果接口更改了字段名称,这里也需要更改

比如我有一个接口是这样定义的:

@PostMapping("/xxx")    public void test(@RequestParam(value = "abc") MultipartFile file) {        ...    }

那么使用上述工具请求该接口的时候,就需要将

builder.addPart("multipartFile", new FileBody(file));

改为

builder.addPart("abc", new FileBody(file));

以上就是关于“Java发送form-data请求怎么实现文件上传”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Java发送form-data请求怎么实现文件上传

本文链接: https://www.lsjlt.com/news/341786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java发送form-data请求实现文件上传
    如何使用Java发送form-data格式的请求上传multipart文件,供大家参考,具体内容如下 封装了以下工具类: package com.leeyaonan.clinkz.c...
    99+
    2024-04-02
  • Java发送form-data请求怎么实现文件上传
    这篇“Java发送form-data请求怎么实现文件上传”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java发送form-...
    99+
    2023-07-02
  • Java发送form-data请求
    在Java中发送form-data请求,可以使用Apache HttpClient或OkHttp这样的HTTP客户端库来发送请求。 一、HttpClient 添加依赖 org.apache.httpcomponents htt...
    99+
    2023-09-09
    java 开发语言 okhttp
  • python + request实现multipart/form-data请求上传文件
    1、multipart/form-data介绍         multipart/form-data 是 HTTP 协议中用于上传文件的一种类型。它允许客户端向服务器发送文件以及一些额外的元数据(例如文件名、MIME 类型、图片等)。这种...
    99+
    2023-09-16
    python http
  • java form-data上传文件怎么实现
    在Java中,可以使用Apache HttpClient库来实现form-data形式的文件上传。下面是一个简单的示例代码: imp...
    99+
    2023-10-30
    java
  • python怎么使用form-data形式上传文件请求
    虽然现在基本上都约定俗成的接口都用json形式请求但是不可避免地 有些接口需要传文件流,此时就需要用form-data形式上传了for.e:存在以下接口,通过接口创建海报图 但需要上传缩略图,此时接口的Content-Type就不能是app...
    99+
    2023-05-15
    Python form-data
  • 解决axios发送post请求上传文件到后端的问题(multipart/form-data)
    目录项目场景:问题描述原因分析:解决方案:项目场景: 后端:实现了一个文件上传服务接口,可以接收前端传递过来的MultipartFile文件,并存储到服务器本地中。前端:获取type...
    99+
    2024-04-02
  • python如何使用form-data形式上传文件请求
    本篇内容介绍了“python如何使用form-data形式上传文件请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!虽然现在基本上都约定俗成...
    99+
    2023-07-06
  • python使用form-data形式上传文件请求的方法
    虽然现在基本上都约定俗成的接口都用json形式请求 但是不可避免地 有些接口需要传文件流,此时就需要用form-data形式上传了 for.e: 存在以下接口,通过接口创建海报图 但...
    99+
    2023-05-18
    form-data上传文件请求form-data上传文件 formdata上传图片
  • python使用requests提交post请求并上传文件(multipart/form-data)
    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结 一、背景         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返...
    99+
    2023-09-04
    python 爬虫
  • 在Java项目中如果发送http请求实现文件上传功能
    在Java项目中如果发送http请求实现文件上传功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体代码如下所示:package wxapi.WxHelper; import...
    99+
    2023-05-31
    java http ava
  • Java实现以form-data形式文件上传到服务器
    Java实现以form-data形式文件上传到服务器 package com.joolun.cloud.mall.common.util;import com.alibaba.fastjson.JSO...
    99+
    2023-08-31
    java 服务器 apache
  • java怎么发送get请求header传参
    在Java中发送GET请求并传递header参数,可以使用`java.net.HttpURLConnection`类。下面是一个示例...
    99+
    2023-10-26
    java
  • jquery中Form怎么实现文件上传
    这篇文章给大家分享的是有关jquery中Form怎么实现文件上传的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。①先是html<a href="javas...
    99+
    2024-04-02
  • Ajax和form+iframe怎么实现文件上传
    这篇文章将为大家详细讲解有关Ajax和form+iframe怎么实现文件上传,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTML5Ajax上传html5的上传实现,是需要file控件以及XMLHttpR...
    99+
    2023-06-08
  • java怎么发送post请求
    在Java中发送POST请求,可以使用java.net包中的HttpURLConnection类。以下是一个简单的示例代码:```j...
    99+
    2023-08-20
    java
  • axios发送post请求上传文件到后端的问题怎么解决
    这篇“axios发送post请求上传文件到后端的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“axios发送po...
    99+
    2023-06-30
  • java怎么发送tcp请求
    Java可以使用Socket类来发送TCP请求。下面是一个简单的示例代码:```javaimport java.io.Buffere...
    99+
    2023-09-26
    java
  • Java使用HttpUtils怎么实现发送HTTP请求
    本篇文章和大家了解一下Java使用HttpUtils怎么实现发送HTTP请求。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录第一部分:简单总结HTTP请求常用配置第二部分:使用JavaLib的HttpUtils第三部分...
    99+
    2023-07-06
  • Python Http发送请求怎么实现
    本篇内容介绍了“Python Http发送请求怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浅析requests在不借助其...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作