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

这篇具有很好参考价值的文章主要介绍了Springboot实现上传文件,并实现调用第三方接口post请求多文件上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目过程中,经常会有和第三方接口打交道的过程,今天实现调用第三方上传文件的接口!!
通常拿到第三方的接口文档的时候,不是第一时间先写代码,而是详细阅读接口文档。若接口需要第三方提供的基本参数,例如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();
		}
	}

通过上述操作、测试,成功调用第三方上传文件接口!!!文章来源地址https://www.toymoban.com/news/detail-597524.html

到了这里,关于Springboot实现上传文件,并实现调用第三方接口post请求多文件上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot中 如何优雅的 重试调用 第三方API?

    引言 在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。 本文将深入探讨如何在Spring Boot项目中优雅地重试调用第三

    2024年01月21日
    浏览(38)
  • 详解SpringBoot中如何优雅地重试调用第三方API?

    作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端。但你不能保证所有的事情一直都很顺利。像有些第三方API,偶尔会出现超时。此时,我们要重试几次,这取决于你的重试策略。 下面举一个我在日常开发中多次看到的例子:

    2024年02月02日
    浏览(47)
  • 【Springboot系列】Springboot系列-调用第三方接口的五种方式汇总,代码实例

    在开发中,经常需要调用第三方接口或者其他的应用接口来完成业务需求。今天分享下Spring Boot中调用第三方接口的多种方式。 1、使用OpenFeign进行调用(推荐) 2、使用原始httpClient请求 3、使用RestTemplate方法 4、使用hutool.httputil 5、使用OkHttp3 Feign是一个声明式的Web Service客户端

    2024年02月11日
    浏览(33)
  • SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中

    转载 首先我们应该知道我们把 SPRINGBOOT 项目打包成WAR包和JAR包的时候分别需要何种插件 我们最常用的把 springBoot 打成jar包的插件是下面这样的一个插件,这是把我们的 springBoot 项目打包成为一个可执行 jar 的插件 把 springBoot 项目打包成一个war包的插件是下面这样的一个插件

    2024年02月07日
    浏览(36)
  • 从头开始用JAVA创建一个自己的简单API并实现第三方调用

            相信大家对这个词汇并不陌生,通俗来说API就是程序之间的接口,在学习和工作中经常会调用别人的API,那么如果我们要做一个自己的API,要如何下手呢。本文将用Spring+JAVA编写一个简单的API,过程可供初学者参考。         为了顾及完全没有经验的小白(比如我

    2024年02月10日
    浏览(37)
  • Vue+element Upload利用http-request实现第三方地址图片上传

    Vue + element (el-upload)中的 :http-request 图片上传 java后端上传接口,利用 OSS 存储图片 postman测试 图片上传功能及方法 对比: 服务端签名后直传 使用element UI 的el-upload实现第三方地址图片上传,替换原来的action方法 直接上传方法如下:上传图片根据action地址请求后获取到图片u

    2023年04月26日
    浏览(28)
  • node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件

    Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。 前面我们已经知道了怎样利用express提供的静态资源处理中间件 express.static() 处理用户请求静态资源文件(图片, js, css等) 接下来学习如何处理用

    2024年02月06日
    浏览(31)
  • 基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

    前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移,但是在实际生产环境,我们在迁移到目标库之前还需要做一些过滤和转换工作;比如,在诗词数据迁移后,发现原来 MySQL 中的诗词数据都是繁体字,这就导致在直接迁移到 ClickHous

    2024年02月11日
    浏览(31)
  • 基于opencv第三方视觉库,通过内网IP调用手机摄像头,实现人脸识别与图形监测

    OpenCV 是一个开源的计算机视觉库,OpenCV 库用C语言和 C++ 语言编写,可以在 Windows、Linux、Mac OS X 等系统运行。同时也在积极开发 Python、Java、Matlab 以及其他一些语言的接口,将库导入安卓和 iOS 中为移动设备开发应用。 OpenCV 库包含从计算机视觉各个领域衍生出来的 500 多个函

    2024年02月09日
    浏览(29)
  • java通过httpclient携带请求头参数获取第三方文件流接口并实现实现文件下载

    创建httpclient 请求,并在header携带指定key,也可根据实际需要携带token等信息。获取第三方接口返回的文件输入流并写到本地response中,实现返回文件流,前端通过js的a标签进行下载。 代码如下: 前端js代码

    2024年02月16日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包