JAVA 记录内网服务通过外网服务获取文件流

2023-11-08

        公司项目遇到,对接第三方接口时需要根据链接获取网络文件保存到我们自己的服务器,但是本服务无法访问外网,只能通过请求另一个服务去访问外网。故准备由外网服务获取网络文件并将文件流推送回内网服务进行保存。

外网服务接口:

@RestController
@RequestMapping("/url")
@ApiType(name = "内部接口转发")
public class UrlController extends GenericDataForFileController<HttpRequest, GeneralResponseDto> {
    @Autowired
    private HttpServletResponse response;

    @Override
    public void execute(HttpRequest req, GeneralResponseDto respData) {
        try {
            URL url = new URL(req.getUrl());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //设置超时间为3秒
            conn.setConnectTimeout(10 * 1000);
            //防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            response.setCharacterEncoding("utf-8");
            response.setContentType("multipart/form-data");
            response.setHeader("Content-Disposition",
                    "attachment;fileName=" + req.getParam().toString());
            InputStream is = conn.getInputStream();
            try {
                byte[] b = new byte[1024];
                int length;
                while ((length = is.read(b)) > 0) {
                    response.getOutputStream().write(b, 0, length);
                }
            } catch (IOException e) {
                throw e;
            } finally {
                if (response.getOutputStream() != null) {
                    try {
                        response.getOutputStream().close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        } catch (MalformedURLException e) {
            logger.info("文件下载失败");
        } catch (IOException e) {
            logger.info("文件下载失败");
        }

    }
}

内网服务接口,本处文件保存用了hutool的FileUtil,属于本地保存:

/**
     * 从网络Url中下载文件
     *
     * @param urlStr
     * @param fileName
     * @param savePath
     * @throws IOException
     */
    private void downLoadFromUrl(String urlStr, String fileName, String savePath) throws IOException {
        URL url = new URL(getStream);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置body内的参数,put到JSONObject中
        JSONObject param = new JSONObject();
        param.put("url", urlStr);
        param.put("param", fileName.substring(fileName.lastIndexOf("/") + 1));
        conn.setRequestProperty("Content-Type", "application/json");

        //设置超时间为3秒
        conn.setConnectTimeout(10 * 1000);
        //请求post方式
        conn.setRequestMethod("POST");
        // Post请求不能使用缓存
        conn.setUseCaches(false);
        // 设置是否从HttpURLConnection输入,默认值为 true
        conn.setDoInput(true);
        // 设置是否使用HttpURLConnection进行输出,默认值为 false
        conn.setDoOutput(true);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
        writer.write(param.toString());
        writer.close();
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        if (inputStream.available() < 1000) {
            throw new IOException("文件获取失败");
        }
        String upload = savePath + "/" + fileName;
        //写入
        FileUtil.writeFromStream(inputStream, upload);
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 记录内网服务通过外网服务获取文件流 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • yolov3算法检测单类物体

    yolov3是目前目标检测类检测效果和检测速度最好的算法 原版的yolov3检测的物体种类众多 本文实在原有yolov3上将多累物体检测简化为单类物体检测 本文的原始代码基于github上copy的 源码下载地址为 https github
  • WebStorm开发插件

    目录 目录 1 图标插件 Atom Material Icons 2 Translation 3 彩色括号 Rainbow Brackets 4 高亮括号 HighlightBracketPair 5 代码缩略图 CodeGlance2 6
  • 关于Directly Mapping Texels to Pixels的例子

    原文 http msdn microsoft com en us library bb219690 28v vs 85 29 aspx 是关于在direct3d9中 对于屏幕空间中 将贴图映射到像素的问题 以下是pixel shader源代
  • c语言在线编译网页版,c语言在线编译器(c语言网页版在线编译器)

    不好意 我想要的是下载 点 问题没说清楚 sorry dev c 选择什么样的编译器对我学习C语言来说重要么 在线等大神指点 不要复制 学习C语言的话 VC基本上就差不多了 小巧 方便 启动快 而VS是大软件 启动时有点慢 GCC是linu
  • c++学习笔记3_函数模板的使用并实现自己定义的队列

    实验要求 熟悉C 目录 1 函数模板 Function Templates 类模板 Class Template 模板特化 实验部分 sy3 h sy3 cpp main cpp 运行结果 1 函数模板 Function Templates
  • 深度学习------tensorflow2.0:RNN单词预测,句子预测,股票预测

    1 单词预测 import tensorflow as tf from tensorflow keras layers import Dense Activation from tensorflow keras models import
  • 03C++核心编程——黑马程序员

    C 核心编程 本阶段主要针对C 面向对象编程技术做详细讲解 探讨C 中的核心和精髓 1 内存分区模型 C 程序在执行时 将内存大方向划分为4个区域 代码区 存放函数体的二进制代码 由操作系统进行管理的 全局区 存放全局变量和静态变量以及常量
  • python自带的解释器和编辑器叫什么_02-Python解释器和编辑器介绍

    Python解释器和编辑器介绍 解释器 python 这个解释器 是用C语言开发的 也叫 CPython 在命令行下运行 python 就是启动 CPython解释器 CPython 是使用最广的 Python解释器 教程的所有代码也都在
  • SQL的多表查询(笛卡尔积原理)

    MySQL的多表查询 笛卡尔积原理 先确定数据要用到哪些表 将多个表先通过笛卡尔积变成一个表 然后去除不符合逻辑的数据 根据两个表的关系去掉 最后当做是一个虚拟表一样来加上条件即可 注意 列名最好使用表别名来区别 笛卡尔积 Demo 左 右
  • 2023年自然语言处理与信息检索国际会议(ECNLPIR 2023)

    会议简介 Brief Introduction 2023年自然语言处理与信息检索国际会议 ECNLPIR 2023 会议时间 2023年9月22日 24日 召开地点 中国杭州 大会官网 ECNLPIR 2023 2023 Eurasian
  • 【C++】随机数rand( ) 和 随机数引擎

    rand 基本 使用随机数时 经常见到的是C标准库提供的函数rand 这个函数会生成一个0到RAND MAX 32767 之间的一个整形数 分布 为了得到一个给定范围内的随机数 通常会对生成的随机数取余 rand n rand n m m
  • 【电路设计】单节锂电池使用

    前言 最近在研究如何利用单节锂电池给3 3V单片机供电 找到两个比较好的教程 单节锂电池如何转3 3V 升压还是降压 锂电池接了保护板 就可以用五伏电压直接充电了吗 其中上面提到的LDO 这里有一个型号 ME6209 MP2155应用示例
  • nacos启动报错Fail to init node, please see the logs to find the reason.

    启动程序路径不能有中文名
  • 数据库SQLserver期末复习重点汇总

    数据库的三级模式结构 外模式 gt 概念模式 gt 内模式 模式也称概念模式或逻辑模式 是对数据库中全部数据的逻辑结构和特征的描述 是所有用户的公共数据试图 内模式也称存储模式或物理模式 是对数据物理结构和存储方式的藐视 是数据在数据库内部
  • ES6语法说明

    一 ES6语法说明 1 let 变量声明 let a b c let d 1 f 一 g let 不能重复声明 let start liu let start yuan 错误的 已经声明过的变量名 不存在变量提升 关键字let 不能先使用
  • 5.1 综合案例- 将温湿度数据发送到云端(2.2版本接口有更新)

    综合案例 将温湿度数据发送到云端 案例说明 功能实现 1 物联网平台开发 2 设备端开发 2 代码 3 测试效果 案例说明 温湿度传感器测量当前温湿度 将实时温湿度信息上传云端 从而实现云端的监管 传感器使用详见3 11 haas506 2
  • centos7安装配置hadoop-3.2.2(单机安装、伪分布式安装)

    前言 看着官网的教程还是有坑的 so总结了一下 一 环境准备 centos7 hadoop3 2 2 jdk1 8 yum install rsync y ssh 最小化安装的系统中已有ssh 不用安装 二 开始安装 1 首先安装rsync
  • 华为OD机试 - 数大雁(Python)

    题目描述 一群大雁往南飞 给定一个字符串记录地面上的游客听到的大雁叫声 请给出叫声最少由几只大雁发出 具体的 1 大雁发出的完整叫声为 quack 因为有多只大雁同一时间嘎嘎作响 所以字符串中可能会混合多个 quack 2 大雁会依次完整发
  • OSPF详解(HCIP)

    学习目标 1 了解OSPF基本特性 2 了解OSPF邻接关系建立流程 3 了解OSPF报文 4 了解1类到7类LSA 5 OSPF矢量图画法 6 OSPF不规则区域解决方法 7 OSPF网络类型 8 OSPF特殊区域特性 一 OSPF基本特
  • JAVA 记录内网服务通过外网服务获取文件流

    公司项目遇到 对接第三方接口时需要根据链接获取网络文件保存到我们自己的服务器 但是本服务无法访问外网 只能通过请求另一个服务去访问外网 故准备由外网服务获取网络文件并将文件流推送回内网服务进行保存 外网服务接口 RestController