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 记录内网服务通过外网服务获取文件流 的相关文章

  • 在 Java 中捕获(捕获)窗口中的鼠标光标

    我正在寻找一种方法 在鼠标进入窗口后捕获或捕获该窗口中的鼠标 就像鼠标被捕获在虚拟机窗口中一样 直到用户按 CTRL ALT DEL 或以其他方式释放鼠标 我如何在 Java 中实现这一点 全屏显示不是一个选择 EDIT 这里有一些 SSC
  • “JSONArray 文本必须在 null 的第 1 个字符处以 '[' 开头”

    只是想知道这个错误可能意味着什么 我从下面的代码中得到它 try JSONArray jArray new JSONArray result for int i 0 i
  • 在 String 值之后打印 int 值

    我有以下示例代码 int pay 80 int bonus 65 System out println pay bonus bonus pay 有人可以向我解释一下为什么我得到以下输出 145 6580 您的代码正在从左到右解释表达式 pa
  • 类型已知,但方法指的是缺失类型

    我对 java 和 Eclipse 不太有经验 但遇到以下问题 我正在写类似的东西 Point3D myPoint myClass myMethod arg 我收到错误 方法 myMethod myType arg 引用缺失的类型 Poin
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何将本机数据库运算符 (postgres ~) 与 JPA 标准生成器一起使用?

    我使用 JPA 2 0 标准构建以下查询 简化 select n from notif n where n message b la 我正在使用 postgresql 数据库 我真的需要 运算符 而不是像 我可以使用与 CriteriaBu
  • 如何避免Eclipse在将类名放在注释中时导入类,以便checkstyle稍后不会抱怨?

    有时我将类名放在方法或类的注释中只是为了引用 但是 Eclipse 会自动执行导入并在文件中留下导入语句 这会导致稍后出现 未使用的导入 检查样式错误 当我在注释中输入类名时 是否可以更改一些配置以避免 Eclipse 自动导入 人们不同意
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 使用 Java 8 Spring 4 + MyBatis 集成问题

    使用 Java 8 1 8 0 60 Spring 4 2 1 和 MyBatis 3 3 0 时遇到以下异常 Sep 29 2015 11 02 58 AM org springframework context annotation A
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • 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