我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JAVA 接口文件传参 & 接收文件; 接口接收文件流(主打的就是无脑)

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JAVA 接口文件传参 & 接收文件; 接口接收文件流(主打的就是无脑)

有这么一个业务场景: 系统A 把文件传送到 系统B 系统B对文件进行处理(加水印or保存...)系系统B 把处理完的文件返回给系统A 系统A进行保存备份。

编写了两个类  sendFile(系统A)  ReceiveFileController(系统B)采用 httpClient 进行接口调用 ,系统B 把回传的文件写在 response的流里。话不多说,上代码

系统A:

POM文件

                    org.apache.httpcomponents            httpmime            4.5                            org.apache.httpcomponents            httpclient            4.5        

调用接口 发送文件 接收返回的文件流保存文件

package com.example.File;import org.apache.http.Consts;import org.apache.http.HttpEntity;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.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.entity.ContentType;import org.apache.http.entity.mime.HttpMultipartMode;import org.apache.http.entity.mime.MultipartEntityBuilder;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import java.io.*;import java.nio.file.Files;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;public class sendFile {    public static void main(String[] args) {        doPostFile2("https://.../receiveFile/test","userid",new File("D:\\1.jpg"),"D:\\2.jpg");    }        public static void doPostFile2(String url, String param, File file,String downloadPath) {        CloseableHttpClient httpClient = HttpClients.createDefault();        // https   需要SSL        if (url.startsWith("https://")) {            httpClient = sslClient();        }        String resultString = "";        CloseableHttpResponse response = null;        HttpPost httppost = new HttpPost(url);        //返回的字节流        byte[] bytes = null;        try {            // HttpMultipartMode.RFC6532    避免文件名为中文时乱码            MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);            builder.setCharset(Consts.UTF_8);            builder.setContentType(ContentType.MULTIPART_FORM_DATA);            //或者使用字节流也行,根据具体需要使用            builder.addBinaryBody("file", Files.readAllBytes(file.toPath()),ContentType.APPLICATION_OCTET_STREAM,file.getName());            // 添加参数 addTextBody的key可以自定义和被调接口的入参保持一直    可多个addTextBody     key不一样即可  需在接收方接收            builder.addTextBody("param", param);            //builder.addTextBody("key1", param);            //可以设置 请求头            //httppost.addHeader("token", param.get("token"));            HttpEntity reqEntity = builder.build();            httppost.setEntity(reqEntity);            // 设置超时时间            httppost.setConfig(getConfig());            response = httpClient.execute(httppost);            //我这里  调用接口返的字节流  所以获取字节数组            //resultString = EntityUtils.toString(response.getEntity(), "UTF-8");            HttpEntity entity = response.getEntity();            //输出流 字节数组            bytes = EntityUtils.toByteArray(entity);        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                response.close();            } catch (IOException e) {                e.printStackTrace();            }        }        InputStream inputStream = new ByteArrayInputStream(bytes);        OutputStream outputStream = null;        try {            // todo下载的目录不存在需要创建            byte[] bs = new byte[1024];            int len;            outputStream = new FileOutputStream(downloadPath);            while ((len = inputStream.read(bs)) != -1) {                outputStream.write(bs, 0, len);            }        } catch (Exception e) {            throw new RuntimeException("照片处理失败:" + e);        } finally {            try {                outputStream.close();                inputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    //超时时间;    private static RequestConfig getConfig() {        return RequestConfig.custom().setConnectionRequestTimeout(50000).setSocketTimeout(150000)                .setConnectTimeout(50000).build();    }        private static CloseableHttpClient sslClient() {        try {            SSLContext ctx = SSLContext.getInstance("TLS");            X509TrustManager tm = new X509TrustManager() {                @Override                public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1)                        throws CertificateException {}                @Override                public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1)                        throws CertificateException {}                @Override                public X509Certificate[] getAcceptedIssuers() {                    return null;                }            };            ctx.init(null, new TrustManager[] { tm }, null);            SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();            return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();        } catch (NoSuchAlgorithmException e) {            throw new RuntimeException(e);        } catch (KeyManagementException e) {            throw new RuntimeException(e);        }    }}

系统B

package com.example.File;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;@RestController@RequestMapping(value = "/receiveFile")public class ReceiveFileController {    @PostMapping("/test")    public void receiveFile(@RequestParam("file")MultipartFile file, @RequestParam("param")String param, HttpServletResponse response){        try {            //拿到文件流            InputStream inputStream = file.getInputStream();            //todo开始处理业务            //处理完的文件放在 response中            OutputStream outputStream = response.getOutputStream();            //todo 把处理的东西写在  outputStream即可        } catch (IOException e) {            e.printStackTrace();        }    }}

来源地址:https://blog.csdn.net/weixin_45177751/article/details/129861591

免责声明:

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

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

JAVA 接口文件传参 & 接收文件; 接口接收文件流(主打的就是无脑)

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

下载Word文档

猜你喜欢

如何使用SpringMVC接收文件流上传和表单参数

这篇文章主要介绍“如何使用SpringMVC接收文件流上传和表单参数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用SpringMVC接收文件流上传和表单参数”文章能帮助大家解决问题。接收文件
2023-06-29

SpringBoot文件上传同时接收复杂参数的过程详解

这篇文章主要介绍了SpringBoot文件上传同时,接收复杂参数,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-19

python调用接口上传文件的方法是什么

在 Python 中调用接口上传文件的方法可以使用 `requests` 库实现。下面是一个示例代码,演示了如何使用 `requests` 库上传文件:```pythonimport requests# 创建一个字典,包含需要上传的文件fi
2023-10-08

android通过蓝牙接收文件打开时无法自动选择合适的应用程序

通过蓝牙接收文件,从历史传输记录打开,无法自动选择合适的应用程序 但是从file manager打开这个新接收的文件,是可以选择对应的应用程序(比如video player打开.3gp、.mp4文件) 历史传输记录打开download的文件
2022-06-06

Java中将接口返回的字节串转为文件的方法是什么

本篇内容主要讲解“Java中将接口返回的字节串转为文件的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中将接口返回的字节串转为文件的方法是什么”吧!讲一下现在的需求场景最近公司
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录