java实现调用第三方接口post请求上传文件请求参数为MultipartFile携带token的解决方案_java post multipartfile-程序员宅基地

技术标签: spring  java  

java实现调用第三方接口post请求上传文件请求参数为MultipartFile携带token的解决方案

控制器层:

 /**
     * 上传名片
     *
     * @param file 文件流
     * @return 返回结果
     */
    @PostMapping("/upload_image")
    public AjaxResult uploadImage(@RequestParam("file") MultipartFile file) {
        return iApiUserCenterService.uploadImage(file);
    }
    ```
    **serviceimpl:**
    /**
     * 上传名片
     */
    @Override
    public AjaxResult uploadImage(MultipartFile file) {
        AjaxResult ajaxResult = new AjaxResult();

        try {
            MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>();
            bodyMap.add("file", new FileSystemResource(convert(file)));


            String url = this.url + "/image/upload";
            String res = httpPostUtils.JPost(url,file,httpSession.getAttribute("token").toString());
            if ("".equals(res) || res == null) {
                logger.info("上传名片失败,调用官网接口返回结果为空->{}", res);
                ajaxResult.put(AjaxResult.CODE_TAG, AjaxResult.Type.ERROR);
                ajaxResult.put(AjaxResult.MSG_TAG, "上传名片失败,调用官网接口返回结果为空");
                return ajaxResult;
            }
            //将返回数据转换成json
            JSONObject jsonObject = JSONObject.parseObject(res);
            String message = (jsonObject.get("msg")).toString();
            String code = (jsonObject.get("code")).toString();
            JSONObject dataObject = (JSONObject) jsonObject.get("data");
            String path = dataObject.getString("path");
            //TODO 需要将返回的图片路径进行保存
            if ("1".equals(code)) {
                ajaxResult.put(AjaxResult.CODE_TAG, AjaxResult.Type.SUCCESS);
                ajaxResult.put(AjaxResult.MSG_TAG, message);
                ajaxResult.put(AjaxResult.DATA_TAG, path);
            } else {
                ajaxResult.put(AjaxResult.CODE_TAG, AjaxResult.Type.ERROR);
                ajaxResult.put(AjaxResult.MSG_TAG, message);
            }
            logger.info("上传名片接口调用结束结束,响应结果{}", res);


        } catch (Exception e) {
            ajaxResult.put(AjaxResult.CODE_TAG, AjaxResult.Type.ERROR);
            ajaxResult.put(AjaxResult.MSG_TAG, "调用上传名片接口异常");
            logger.info("调用上传名片接口异常,错误信息{}", e.getMessage());
        }
        return ajaxResult;
    }


## 重要的util
 /**
     *
     *  发送文件MultipartFile类型的参数请求第三方接口
     * @param url  请求url
     * @param file 参数
     * @return 字符流
     * @throws IOException
     */
    public String JPost(String url, MultipartFile file, String token) throws IOException {
        MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>();
        bodyMap.add("file", new FileSystemResource(convert(file)));
        HttpHeaders headers = new HttpHeaders();
        headers.add("accept", "*/*");
        headers.add("connection", "Keep-Alive");
        headers.add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
        headers.add("Accept-Charset", "utf-8");
        headers.add("Content-Type", "application/json; charset=utf-8");
        headers.add("token", token);
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyMap, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
        String body = response.getBody();
        return body;
    }

    /**
     * 接收处理传过来的文件
     * @param file MultipartFile 类型的文件
     * @return
     */
    public static File convert(MultipartFile file) {
        File convFile = new File(file.getOriginalFilename());
        try {
            convFile.createNewFile();
            FileOutputStream fos = new FileOutputStream(convFile);
            fos.write(file.getBytes());
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return convFile;
    }


以上成功解决调用第三方接口上传文件问题,但是会在根目录下创建一个文件需要重新回调删除有待解决


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48027232/article/details/109569260

智能推荐

JVM性能优化 —— 类加载器,手动实现类的热加载_拓展类加载器-程序员宅基地

文章浏览阅读573次,点赞21次,收藏20次。双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,这不就是传说中的实力坑爹啊?_拓展类加载器

Angular_树形控件_ng-zorro nz-tree 修改节点名称-程序员宅基地

文章浏览阅读5.9k次。Tree树形控件何时使用#文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件可以完整展现其中的层级关系,并具有展开收起选择等交互功能。代码演示root1child1child1.1child1.2child2root2root3基本最简单的用法,展示可勾选,可选中,禁用,默认展开等功能。root1root2child2.1ch..._ng-zorro nz-tree 修改节点名称

PHP微信公众平台开发-BAE-视频+笔记+源码_微信公众号开发号码簿-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏10次。2018年8月24日,沉迷于学习微信公众号开发。本篇文章是传智播客课程“PHP微信公众平台开发”前十二节课的课程笔记。课程的视频链接http://yun.itheima.com/course/163.html ,视频可免费下载,我觉得老师讲得挺好的,采用的是百度云BAE。同时,推荐方倍工作室的博客园(微信公众平台开发入门教程),采用新浪云SAE。本课程笔记和源码可供下载:https://d..._微信公众号开发号码簿

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

随便推点

Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构_pom <packaging>-程序员宅基地

文章浏览阅读4.1w次,点赞19次,收藏27次。1. packagingpackaging给出了项目的打包类型,即作为项目的发布形式,其可能的类型。在Maven 3中,其可用的打包类型如下:jar,默认类型warejbearrarparpommaven-plugin2.multi-modulesMaven 3支持Maven项目的多模块(multi-modules)结构。这样的Maven项目也被称为聚合项目,通常由一个_pom

Composer 原理(二) -- 小丑_composer repositories-程序员宅基地

文章浏览阅读194次。Composer是一个非常流行的PHP包依赖管理工具,已经取代PEAR包管理器,对于PHP开发者来说掌握Composer是必须的.对于使用者来说Composer非常的简单,通过简单的一条命令将需要的代码包下载到vendor目录下,然后开发者就可以引入包并使用了.其中的关键在于你项目定义的composer.json,可以定义项目需要依赖的包(可能有多个),而依赖的包可能又依赖其他的包(这就是组件..._composer repositories

W5500+F4官网TCPClient代码出现IP读取有问题,乱码问题_w5500 ping 网络助手 乱码 send(sock_tcps,tcp_server_buff,-程序员宅基地

文章浏览阅读756次。1.开发板:STM32F407;2.STM32F407+W5500代码:3.出现的问题:(1)串口助手打印出来的IP、网关地址等与自设的静态IP、网关等不匹配;(2)网络数据收发为乱码;4.解决方法出现这些现象都是源于一个问题,SPI的时序设置有问题。我这里是速度过快,所以将SPI_BaudRatePrescaler_2改为SPI_BaudRatePrescaler_8后以上问题均解决。..._w5500 ping 网络助手 乱码 send(sock_tcps,tcp_server_buff,len);

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

推荐文章

热门文章

相关标签