Springboot实现上传文件,并实现调用第三方接口post请求多文件上传文件

利用SpirngBoot实现文件上传功能 自动配置是SpringBoot为我们提供的便利之一,开发者可以在不作任何配置的情况下,使用SpringBoot提供的默认设置,如处理文件需要的MultipartResolver。:文件大小达到该阈值,将写入临时目录,默认为0,即所有文件都会直接写入磁盘临时文件中。对应关系需要自己去定义,如果访问失败,可以试着打印以下路径,看看是否缺失了路径分隔符。,它的优点在于:使用Servlet所提供的功能支持,不需要依赖任何其他的项目。:最大文件大小,以字节为单位,默认为1M。:整个请求的最大容量,默认为10M。 阅读详情
AI摘要

在项目中与第三方接口交互,通常先详细阅读接口文档,然后使用工具如Postman进行接口测试。SpringBoot中,通过MultipartFile支持多文件上传,先构建请求URL和参数,使用RestTemplate或Hutool的HttpRequest发送POST请求。文件转换成File对象是关键步骤,确保能正确传递给第三方接口。经过测试,成功实现了调用第三方接口进行文件上传。

项目过程中,经常会有和第三方接口打交道的过程,今天实现调用第三方上传文件的接口!!
通常拿到第三方的接口文档的时候,不是第一时间先写代码,而是详细阅读接口文档。若接口需要第三方提供的基本参数,例如signkey, secrect等,也可以是其他的,查看文档里是否提供。再用工具(postman、swagger)构建接口请求参数进行接口测试,测试成功后, 再开始写代码!!

问题说明

1、我们自己的封装接口上传文件类型为MultipartFile
2、上传文件不是到我们服务器,而是到第三方接口上
3、使用hutool HttpRequest工具进行调用
4、直接传入MultipartFile是不可用的

1、SpringBoot实现文件上传-支持多文件

文件上传,参数用MultipartFile类型接收
编写contoller层接口
接口是post请求方式,参数用MultipartFile类型接收

    @ApiOperation(value = "多文件上传")
    @PostMapping("/upload/file")
    public RtnResult<Object> uploadAttatchmentFile(MultipartFile[] file) {
        return mailService.uploadAttatchmentFile(file);
    }

编写service层方法
逻辑:
a.先构建请求URL
b. 按第三方接口文档处理多文件上传请求参数,构建HttpHeaders,HttpEntity
c.使用RestTemplate请求第三方接口
d.处理返回结果

    public RtnResult<Object> uploadAttatchmentFile(MultipartFile[] files) {
           String url = urlPrefix + UPLOAD_ATTACHMENT_FILE_URL;
        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
        for (MultipartFile file : files) {
            param.add("file", file.getResource());
        }
        RestTemplate request = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(param, headers);
        ResponseEntity<Map> response = request.postForEntity(url, requestEntity, Map.class);
        if (response.getStatusCode() != HttpStatus.OK) {
           return  (RtnResult.errorCodeMsg.SERVER_ERROR);
        }
        Map result  = response.getBody();
        return RtnResult.success(result);
    }

2、调用第三方接口post请求多文件上传文件

上传调用代码
注意:transferToFile()这个方法时最主要的,我们需要转换File类型进行第三方上传

public R uploadByte(String attachType, MultipartFile file) {
    File toFile = transferToFile(file);
    Map data = new HashMap();
    data.put("file", toFile);
    data.put("attachType", attachType);
    String body = HttpRequest.post("第三方url")
            .form(data)
            .contentType("multipart/form-data")
            .execute()
            .body();
    Map result = new HashMap();
    if (StrUtil.isNotBlank(body)) {
        result = JSON.parseObject(body, Map.class);
    }
    return R.ok().put("data", result);
}

MultipartFile 转 File(第一种方法)

public 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;
}

MultipartFile 转 File(第二种方法)

/**
	 * MultipartFile 转 File
	 *
	 * @param file
	 * @throws Exception
	 */
	public static File multipartFileToFile(MultipartFile file) throws Exception {

		File toFile = null;
		if (file.equals("") || file.getSize() <= 0) {
			file = null;
		} else {
			InputStream ins = null;
			ins = file.getInputStream();
			toFile = new File(file.getOriginalFilename());
			inputStreamToFile(ins, toFile);
			ins.close();
		}
		return toFile;
	}

	//获取流文件
	private static void inputStreamToFile(InputStream ins, File file) {
		try {
			OutputStream os = new FileOutputStream(file);
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
			os.close();
			ins.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

通过上述操作、测试,成功调用第三方上传文件接口!!!

Spring Boot 实战:轻松实现文件上传与下载功能 本文围绕 Spring Boot 文件上传与下载功能展开。介绍其依赖引入、配置设置,详述上传接口编写与安全要点,涵盖类型限制、大小验证及防覆盖措施。在下载功能上,讲解从基础接口到异常处理再到断点续传的实现,并以实战案例展示应用场景,为开发者提供全面实用的功能开发指引,助其构建相关应用系统。 阅读详情

相关推荐

Spring与Swagger3实战:如何优雅实现多文件上传与JSON元数据整合

本文详细介绍了在Spring Boot项目中,如何结合Swagger3优雅地实现多文件与JSON元数据混合上传。通过使用@RequestPart注解和正确的Swagger Schema配置,解决了multipart/form-data请求中文件与JSON数据绑定的核心问题,并提供了单文件与多文件上传的完整实战代码示例。

weixin_29304021的博客 156

hutool使用post请求传参MultipartFile[]文件对象

hutool中转MultipartFile[]

cb_520 8743

springboot 后端文件上传,多文件上传,预览接口开发实现

在Spring Boot中实现文件上传和多文件上传的功能可以通过使用Spring MVC的MultipartFile类来实现。以下是一个简单的示例代码,展示了如何实现文件上传和多文件上传的功能。

wuai66的博客 1712

httpClient 的 MultipartFile 的上传与接收 hutools工具

控制台输出就不贴了, 可自行验证.文件可以获取且保存到D盘。

王sir的博客 3167

SpringBoot2.1.x,okhttp3网络请求之MultipartFile方式上传文件,multipart/form-data表单多文件+多参数

一)引入okhttp3的jar <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.0.0</version> </dependency> 二)提供一个上传服务接口,文件类型为MultipartFile package com.oyse.

p812438109的专栏 7495

springboot1.x实现多文件上传,并且实现实时展示进度

springboot1.x实现多文件上传,实时展示进度 1 配置 pom文件中添加 xxxfileload.jar <!-- fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</ar...

SugarNj的博客 1481

springboot实现多文件上传

实现springboot的多文件上传,首先创建一个springboot项目,添加spring-boot-starter-web依赖。 然后在resources下的static文件夹下创建uploads.html文件,文件内容如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U...

Shu2018ai的博客 1万+

我的springboot学习之实现多个文件的上传

因为昨天学了单文件上传,小可爱就心想了一个事儿, 万一我以后有多个文件上传,怎么办呢? 于是,今天又去学了多文件上传... 这次呢,在上次的单文件上传,我找到了灵感~ 多个文件上传肯定是得有界面给用户上传的,至于界面就是加多一个form表单的事情, 至于后台怎么实现,宝宝想到了一个方法, 提取上传文件方法为公共方法,再添加一个上传文件集合,将上传的文件收集起来, 然后,你懂的,哈...

shenshen0702的博客 3548

Springboot中使用RestTemplate完成多文件上传

背景:现有Springboot微服务A,其对外提供一个多文件上传的接口,接口代码如下: /** * 远程服务提供的多文件上传的REST API * @param files * @param request * @return */ @RequestMapping(value = "/file/upload", method = RequestMethod.POST) public Strin...

Lieforlove的博客 5271

淘宝链接跳转微信全攻略:自建合规中转页实现私域引流

在跨平台运营中,链接跳转是连接不同生态、实现流量引导的关键技术。其核心原理是通过服务器端或前端逻辑,将用户从一个平台的链接安全引导至目标页面,同时规避平台间的访问限制。这项技术的核心价值在于打破数据孤岛,实现跨平台用户沉淀与精细化运营,广泛应用于电商引流、私域流量构建和跨平台营销等场景。本文聚焦于**淘宝短链**与**企业微信**之间的跳转难题,提供了一套基于自建中转页面的完整工程解决方案,手把手教你如何通过合规的技术手段,将淘宝流量高效、安全地引导至微信生态,并实现数据追踪与客户分流。

weixin_34185512的博客 413

【从零开始学产品经理】项目立项实战(1)——基本方案与可行性分析:基于微信小程序的记账本

主要阶段:立项-设计-开发-测试-上线-运营-总结。

Ckiyvo的博客 3212

springboot 接收POST请求,并上传文件

新建工程,只需要引入 web和 thymeleaf 两个jar就行。 参考:https://blog.youkuaiyun.com/nece001/article/details/106301721 只需要建4个文件(用的IDE是Netbeans) 先建三个HTML文件,用作模板: 失败页面: <!DOCTYPE html> <html> <head> <title>TODO supply a title</title&g..

nece001的专栏 6107

Ubuntu 24.04 极速部署 Dify:从零到一的保姆级实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Dify的完整教程,从环境准备到部署验证,再到深度优化和安全加固,提供了一套保姆级的实践指南。通过使用Docker和Docker Compose,结合国内镜像源加速,帮助用户高效完成Dify的安装和配置,确保系统稳定运行。

weixin_42662293的博客 246

ssm/springboot框架实现多文件上传--MultipartFile类+multiple属性+Ajax

ssm/springboot框架实现多文件上传–MultipartFile类+multiple属性+Ajax 首先搭建一个 SSM 或者 Spring Boot 项目,这里简单起见,项目就自行搭建了,直接用现成的一个 Spring Boot 项目来做这个功能实现。(代码可以直接用在两种项目上) 接下来开始功能实现: 1.首先新建一个 upload.ftl 文件,如果用的是JSP就新建 upload.jsp,其他模板如thymeleaf、Freemarker、Velocity,就建相应的,这里我这个项目已经配

CJCC白朴的博客 7140

宋浩线性代数笔记

Miao-A-SongHao-Linear-Algebra-Notes bilibili 宋浩老师 “惊叹号” 系列 《线性代数》网课 笔记及时间点目录 Github项目地址:https://github.com/cy69855522/Miao-A-SongHao-Linear-Algebra-Notes ???? 前言 我发现吧,线代没记笔记真不行。 浩浩学习,天天向上。数学网课推荐????宋浩老师的免...

Knife丶小刀博客 4万+

FPGA:UART串口接收(高干扰情况)

在上一篇文章中介绍过UART串口接收模块,其中一个需要优化的方向就是在高干扰情况下,如何实现可靠的UART串口接收任务。

weixin_50164178的博客 1672

springboot采用HttpClient调用第三方接口,推送zip文件

springboot采用HttpClient调用第三方接口,推送zip文件

hml13018052454的博客 1302

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 192

SpringBoot 多文件上传、携带参数

参考文章: https://stackoverflow.com/questions/36005436/the-request-was-rejected-because-no-multipart-boundary-was-found-in-springboot http://6tt.co/sUur 问题: 多文件上传 携带参数获取为 null Failed to parse multipart servlet request; nested exception is java.io.IOExcepti.

weixin_44268792的博客 5627

损失函数大汇总(三十八)(AUCPR Loss附公式推导与代码)

本文系统介绍了AUCPR Loss的原理与应用。针对不平衡分类任务中AUC指标不够敏感的问题,提出通过优化PR曲线面积(AUCPR)来提升模型性能。文章详细推导了AUCPR的可微近似实现:首先用sigmoid函数软化阈值判断,构造可微的TP/FP/FN计数;然后基于软Precision和Recall计算近似PR曲线面积;最后通过数值积分得到可优化的损失函数。特别讨论了温度参数τ对训练稳定性的影响,并比较了AUCPR与AUC、AP等指标的异同。该方法适用于医学筛查、欺诈检测等极端不平衡场景,能更准确反映模型对

悦学共鸣,温柔以待,汇聚光芒,共同成长 441

R语言中的混淆矩阵(Confusion Matrix)是一种常用的评估多分类模型性能的工具

除了准确率,混淆矩阵还提供了其他有用的指标,如灵敏度(Sensitivity)、特异度(Specificity)、精确度(Precision)和召回率(Recall)。混淆矩阵通过比较模型预测结果与实际标签的一致性,帮助我们了解模型的分类准确性和错误类型。此外,混淆矩阵还提供了各种错误类型的统计信息,如假阳性(False Positive)和假阴性(False Negative)等。通过混淆矩阵,我们可以了解模型的整体性能和错误类型,从而对模型进行评估和改进。最后,为了更好地理解混淆矩阵的结果,可以使用。

HackSquad的博客 972

Java文件上传(最详细的单文件上传,多文件上传和异步上传)

form>

刘浩琦的博客 5440

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

springboot进行httpclient接口请求,请求带文件MultipartEntityBuilder

利用springboot进行文件接口请求,首先配置pom文件,添加以下内容: &lt;!--带文件上传HTTP client配置--&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&g...

duandechang123的博客 4780

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

spring boot实现单和多文件上传

springMVC对文件上传做了简化,springboot对此做了更进一步的简化。 java中的文件上传一共涉及两个组件,1.ComminsMultipartResolver 2.StandardServletMultipartResolver,其中ComminsMultipartResolver 使用commons-fileupload来处理multipart请求,而StandardSer...

qq_41426326的博客 9452

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Springboot MockMvc如何写单元测试(模拟http get/post/delete 请求,包括文件上传,下载接口测试)

MockMvc 模拟HTTP get/post/delete 等请求,包括文件上传,下载接口测试)写在前面一、测试包下,代码示例1.1、模拟 Http/Get 请求 示例1.2、模拟 Http/Post 请求 示例1.3、模拟 Http/Delete 请求 示例1.4、模拟 文件上传接口 示例1.5、模拟 下载接口 示例(在控制台会乱码,正常的)二、 写在前面 这里总结了,springboot(M...

诗和远方,任重道远 9879

SpringBoot实现文件上传接口

SpringBoot实现文件上传接口

江夏、的博客 5943
下一篇: Linux学习笔记(1)
Java杂货店
博客等级 码龄5年 9粉丝 3原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值