通过url下载文件和本地路径下载文件是不一样的!

2023-11-05

通过url下载文件:

    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public void getRequest(HttpServletResponse response) {
        String requestPath = "http://xxx.com/demo/sys/test.pdf"
        String filename = "test.pdf";
        InputStream inputStream = null;
        OutputStream out = null;
        File file = null;
        try {
            file = new File(filename);
            URL url =new URL(requestPath);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
//			conn.setConnectTimeout(1000);//超时提示1秒=1000毫秒
            FileUtils.copyURLToFile(url, file);
//			inputStream =  conn.getInputStream();//获取输出流
            response.setHeader("Content-Disposition", "attachment" + ";filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"");
            byte[] bytes = new byte[(int)file.length()];
            inputStream = new FileInputStream(file);
            out = response.getOutputStream();
            out.write(bytes, 0, inputStream.read(bytes));
        } catch (Exception e) {
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (file != null && file.exists()) {
                file.delete();
            }
        }
    }

下载本地文件:

@RequestMapping(value = "download",method = RequestMethod.GET)
    public ResponseEntity<byte[]> download(HttpServletResponse response, HttpServletRequest request) throws Exception{

        //预下载文件路径******
        String preDownload_path = "C:/Users/Administrator/Desktop/Learn/pdf/temp8.pdf";
        int index = preDownload_path.lastIndexOf("/");
        //下载后的文件名
        String downloadName = preDownload_path.substring(index+1);
        System.out.println(index);
        System.out.println(downloadName);

        response.setCharacterEncoding("utf-8");
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;fileName="+java.net.URLEncoder.encode(downloadName,"UTF-8"));

        FileInputStream is = null;
        OutputStream os = null;
        try {
            URL url = new URL(preDownload_path);
            is = new FileInputStream(String.valueOf(url.openStream()));
//            is = new FileInputStream(new File(preDownload_path));
            os = response.getOutputStream();
            byte[] b = new byte[2048];
            int length;
            while ((length = is.read(b)) > 0) {
                os.write(b, 0, length);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            os.close();
            is.close();
        }
        return null;
    }

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

通过url下载文件和本地路径下载文件是不一样的! 的相关文章

  • 如何以编程方式检查应用程序是否在调试模式下运行?

    我必须在应用程序中的某个位置确定我的应用程序是在调试模式还是实时模式下运行 是否有任何函数或代码可用于检查 在开 关两种情况下都会返回 true false 如果是这样 请帮助我 提前致谢 从问题中尚不清楚调试模式是否指的是 应用程序是否可
  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 面试问题 - 在排序数组 X 中搜索索引 i,使得 X[i] = i

    昨天面试时 我被问到了以下问题 考虑一个 Java 或 C 数组X它已排序并且其中没有两个元素是相同的 如何最好地找到索引i这样该索引处的元素也是i 那是X i i 作为澄清 她还给了我一个例子 Array X 3 1 0 3 5 7 in
  • 定制法国号码格式

    我尝试为美国国家 地区使用自定义数字格式 到目前为止效果很好 Not something I want NumberFormat numberFormat0 NumberFormat getNumberInstance Locale US
  • 修复 java 内存泄漏的学习网站

    学习修复 java 内存泄漏的最佳地点是什么 我一直试图在网络上找到好的资源 但令我失望的是 我发现正在讨论玩具示例 我还能够对小型玩具转储进行故障排除 但现实世界的应用程序转储更具挑战性 并且提供的线索很少 我尝试过 Jhat JMap
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • 为移动设备扩展 libgdx UI?

    眼下desktop应用程序的版本很好 按钮缩放得很好 但是当我部署到android它们很小 几乎无法使用 DesktopLauncher public class DesktopLauncher public static void mai
  • mvn dependency:analyze 结果不正确

    我一直在寻找一种工具 它能够向您显示未使用的依赖项 我很快就偶然发现了 Maven 命令mvn dependency analyze 这样做的问题是 它经常检测到 未使用的 依赖项 如果缺失 这些依赖项就会导致构建失败 这是优化项目的示例
  • 如何通过keytool命令删除已经导入的证书/别名?

    我正在尝试通过 keytool 命令删除已导入的证书 keytool delete noprompt alias initcert keystore keycloak jks 但低于异常 keytool 错误 java lang Excep
  • 在 Jenkins 内运行构建时,我收到“java/lang/OutOfMemoryError”

    2020 02 25 10 11 24 986 0000 id 79 信息hudson model AsyncPeriodicWork lambda doRun 0 开始maven repo cleanup 2020 02 25 10 11
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • WSDL 表示中的枚举类型

    WSDL 表示如下
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • 何时以及为何使用缓冲输入和输出流? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到这些是为了减少磁盘 网络调用开销而使用的 这在写操作的情况下似乎很好 但是进行缓冲读取有什么好处呢 如果您按字节读取文件 则每次都会进
  • PSQLException:错误:关系“TABLE_NAME”不存在

    我正在尝试在 PostgreSQL 8 4 2 DB 上运行休眠 每当我尝试运行简单的java代码时 例如 List
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr

随机推荐

  • Could not load dynamic library ‘libcusolver.so.11‘ No such file or directory; LD_LIBRARY_PATH:

    今日在安装tensorflow的时候遇见不能使用gpu的情况 经过一顿费劲网上搜集资料 发现根本就没有人说明白这个事情 特此做个笔记 把这个报错一次性说明白 一是为了给自己做个记录 二是也希望能帮助大家 首先 基本高版本的tensor fl
  • Vue修改默认字体

    1 在assets文件夹下创建文件夹 命名为font 2 在font文件夹中新建文件 font css font face font family pingFangSC Medium src url PingFangMedium 0 ttf
  • 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来

    附上借鉴的地址 https blog csdn net lkp1603645756 article details 85013126 这些都是算法时空复杂度的表示 不仅仅用于表示时间复杂度 也用于表示空间复杂度 O后面的括号中有一个函数 指
  • Matlab学习10-图像处理之傅里叶变换

    文章目录 前言 一 离散傅里叶变换 二 二维离散傅里叶变换 三 傅里叶级数将周期函数转换为不同正弦波的叠加 前言 图像变换 一维离散变换 二维离散变换 傅里叶变换 离散余弦变换 Matlab学习10 图像处理之傅里叶变换 傅里叶变换 优点
  • 联合编译OpenCV+PCL+CUDA时需要注意的问题

    最近在写tsdf的程序 同时使用了OpenCV PCL和CUDA 在编译工程的时候发现了不少问题 在这里整理一下 1 cu和cpp文件 global host device 这样开头的cuda程序只能写在cu文件中 kernal lt lt
  • linux读写锁pthread_rwlock_t

    读写锁说明 读写锁实际是一种特殊的自旋锁 它把对共享资源的访问者划分成读者和写者 这种锁相对于自旋锁而言 能提高并发性 它允许同时有多个读者来访问共享资源 写者是排他性的 一个读写锁同时只能有一个写者或多个读者 但不能同时既有读者又有写者
  • 巴比特

    摘要 据钛媒体报道 当前市场对与内容相关的产品商业化的耐心不及以往 以至于 扎克伯格早早就为元宇宙设想好了商业化的落地场景 元宇宙方面 我们希望能够为用户提供更多业务帮助 比如通过聊天直接获取客户 直接对用户销售产品 提供客服帮助或再向用户
  • 国内NFT平台及玩法一览

    2021年被称为NFT的 元年 互联网巨头 各大企业 艺术家 明星纷纷入局NFT 屡创新高的NFT价格更是让其成为大众关注焦点 此推出NFT系列专题研究 盘点和总结NFT的发行市场 平台背景 投融资状况 市场热点 政策监管等相关内容 帮助读
  • c语言static关键字的理解

    static 一 概述 在c语言中static恰当的使用能让程序更加完美 细节上的严谨 代码会更好 也更利于程序的维护与扩展 而static使用灵活 且又有两种完全无关的用法 所以整理总结一下 二 static的两种用法 1 static修
  • Tomcat项目配置

    1 下载tomcat 版本 9 0 65 链接 https tomcat apache org download 90 cgi 2 解压tomcat tomcat直接解压就可以使用 解压后文件夹目录为 3 bin文件夹下 startup b
  • vue.js -- 全局组件&局部组件

    目录 vue组件 全局组件 组件定义 组件复用 组件的组件 局部组件 总结 vue组件 组件是 Vue js 最强大的功能之一 组件可以扩展 HTML 元素 封装可重用的代码 组件系统让我们可以用独立可复用的小组件来构建大型应用 几乎任意类
  • JAVA逻辑思维题(1)4个人过桥

    有4个女人要过一座桥 她们都站在桥的某一边 要让她们在17分钟内全部通过这座桥 这时是晚上 她们只有一个手电筒 最多只能让两个人同时过桥 不管是谁过桥 不管是一个人还是两个人 必须要带着手电筒 手电筒必须要传来传去 不能扔过去 每个女人过桥
  • vue ag-grid-vue 大数据动态加载服务器请求数据

    vue ag grid vue 渲染大数据表格 动态请求服务器数据设置子目录 目前只能是初始是一次性加载所有数据再分页渲染 还没有研究出滚动分页加载服务器 这个方法是一次加载所有数据在前端再做的分页渲染 点击目录文件展开能动态加载服务器的数
  • 计算机上应用锁,电脑怎么设置软件锁

    题主 针对这个问题有两个解决方案 一 设立两个账户 先创建一个用户 右键计算机 点管理 在弹出的对话框选择用户和组 选择用户 右键空白地方新建用户 设置密码等选项 新建完成关闭对话框 找到软件快捷方式或者软件图标 右键图标 选择属性 在跳出
  • 个人服务器环境搭建

    前言 文档创建时间 2022年12月1日14点26分 初衷 想搭建个人服务器 熟悉Linux的语言以及服务部署相关事情 主要方向可能是个人网站 公众号 小程序后台接口 之前有在免费的服务器上面搭建过 现在再次搭建顺便做个记录 前期准备 云服
  • 学习笔记(一):Windows和Ubuntu系统下的QGIS-python二次开发环境配置方法

    学习笔记 一 Windows和Ubuntu系统下的QGIS python二次开发环境配置方法 过程超级超级无敌详细 0 写在前面 1 Win10系统下QGIS python的开发环境配置 1 1 方法一 使用QGIS软件中的bat文件直接配
  • [Java基础系列第1弹]一文带你了解Java编程语言的精髓:特性、机制、环境和工具

    如果你是一个想要学习编程的新手 或者是一个想要提高编程技能的老手 那么Java编程语言是一个非常好的选择 Java是一种简单 面向对象 分布式 健壮 安全 跨平台 多线程和动态的编程语言 它可以用于开发各种类型和规模的软件应用 Java是目
  • 大厂经典Zookeeper面试题整理汇总

    1 ZooKeeper 是什么 ZooKeeper 是一个分布式的 开放源码的分布式应用程序协调服务 它是一个为分布式应用提供一致性服务的软件 提供的功能包括 配置维护 域名服务 分布式同步 组服务等 ZooKeeper 的目标就是封装好复
  • 在传统公司干IT是一种什么体验(三)

    我的同事人人都是福尔摩斯 我的一举一动都是他们的破案素材 表哥语录 表哥的公司特别重视细节 注重细节本来是一个良好的工作习惯 但是表哥公司的同事把细节用到了极致 可能也是一种内卷的表现 公司里的人基本都干了10年了 公司业务变化也不大 天天
  • 通过url下载文件和本地路径下载文件是不一样的!

    通过url下载文件 RequestMapping value download method RequestMethod GET public void getRequest HttpServletResponse response Str