文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-08 08:01

关注

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

问题说明

我们自己的封装接口上传文件类型为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(第二种方法)

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://blog.csdn.net/syc_java/article/details/130072107

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯