阿里云OSS文件上传下载【专栏】------文件下载(二)

news2025/1/21 22:26:40

目录

    • 1、流式下载
      • 1.1、代码示例
      • 1.2、执行结果
    • 2、下载到本地文件
      • 2.1、代码示例
      • 2.2、执行结果
    • 3、断点续传下载
      • 3.1、代码示例
      • 3.2、执行结果


1、流式下载

当下载的文件太大或者一次性下载耗时太长时,您可以通过流式下载,一次处理部分内容,直到完成文件的下载。
说明:要流式下载,必须有oss:GetObject权限。

1.1、代码示例

/**
     * endpoint是访问OSS的域名。
     * 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
     */
    private static String endpoint = "<yourEndpoint>";

    /**
     * accessKeyId和accessKeySecret是OSS的访问密钥,
     * 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
     * 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
     */
    private static String accessKeyId = "<yourAccessKeyId>";
    private static String accessKeySecret = "<yourAccessKeySecret>";

    /**
     * Bucket用来管理所存储Object的存储空间,
     * 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
     * Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
     */
    private static String bucketName = "<yourBucketName>";

    public static void main(String[] args) throws Exception {
        // 填写Object完整路径,例如 dmjxsy/file.png。Object完整路径中不能包含Bucket名称。
        String objectName = "dmjxsy/DiskId2.log";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
        try {
            // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            // 读取文件内容。
            System.out.println("Object content:");
            BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
            while (true) {
                String line = reader.readLine();
                if (line == null)
                    break;
                System.out.println("\n" + line);
            }
            // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
            reader.close();
            // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
            ossObject.close();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

1.2、执行结果

在这里插入图片描述

2、下载到本地文件

将存储空间(Bucket)中的文件(Object)下载到本地文件。
说明:要下载到本地文件,必须有oss:GetObject权限。

2.1、代码示例

/**
     * endpoint是访问OSS的域名。
     * 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
     */
    private static String endpoint = "<yourEndpoint>";

    /**
     * accessKeyId和accessKeySecret是OSS的访问密钥,
     * 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
     * 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
     */
    private static String accessKeyId = "<yourAccessKeyId>";
    private static String accessKeySecret = "<yourAccessKeySecret>";

    /**
     * Bucket用来管理所存储Object的存储空间,
     * 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
     * Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
     */
    private static String bucketName = "<yourBucketName>";

    public static void main(String[] args) throws Exception {
        // 填写Object完整路径,例如 dmjxsy/DiskId2.log。Object完整路径中不能包含Bucket名称。
        String objectName = "dmjxsy/DiskId2.log";
        //下载到本地路径
        String pathName = "D:\\Downloads\\12.log";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
        try {
            // 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
            // 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
            ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

2.2、执行结果

在这里插入图片描述

3、断点续传下载

当下载大文件时,如果网络不稳定或者程序异常退出,会导致下载失败,甚至重试多次仍无法完成下载。为此,OSS提供了断点续传下载功能。断点续传下载将需要下载的文件分成若干个分片分别下载,所有分片都下载完成后,将所有分片合并成完整的文件。
说明:要断点续传下载,必须有oss:GetObject权限。

3.1、代码示例

  /**
     * endpoint是访问OSS的域名。
     * 参考https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints?spm=a2c4g.11186623.0.0.563479cc0ioUZ7
     */
    private static String endpoint = "<yourEndpoint>";

    /**
     * accessKeyId和accessKeySecret是OSS的访问密钥,
     * 参考:https://help.aliyun.com/zh/oss/product-overview/what-is-oss?spm=a2c4g.11186623.0.i42
     * 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
     */
    private static String accessKeyId = "<yourAccessKeyId>";
    private static String accessKeySecret = "<yourAccessKeySecret>";

    /**
     * Bucket用来管理所存储Object的存储空间,
     * 参考:https://help.aliyun.com/zh/oss/user-guide/buckets-10/?spm=a2c4g.11186623.0.0.47ba2cd9binPXN
     * Bucket命名规范如下:Bucket名称在OSS范围内必须全局唯一,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
     */
    private static String bucketName = "<yourBucketName>";

    public static void main(String[] args) throws Exception {
        // 填写Object完整路径,例如 dmjxsy/file.png。Object完整路径中不能包含Bucket名称。
        String objectName = "dmjxsy/DiskId2.log";
        //下载到本地路径
        String localPathName = "D:\\Downloads\\12.log";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);
        try {
            // 请求10个任务并发下载。
            DownloadFileRequest downloadFileRequest = new DownloadFileRequest(bucketName, objectName);
            // 指定Object下载到本地文件的完整路径,例如D:\Downloads\12.log。
            downloadFileRequest.setDownloadFile(localPathName);
            // 设置分片大小,单位为字节,取值范围为100 KB~5 GB。默认值为100 KB。
            downloadFileRequest.setPartSize(1 * 1024 * 1024);
            // 设置分片下载的并发数,默认值为1。
            downloadFileRequest.setTaskNum(10);
            // 开启断点续传下载,默认关闭。
            downloadFileRequest.setEnableCheckpoint(true);
            // 设置断点记录文件的完整路径,例如D:\Downloads\12.log.dcp。
            // 只有当Object下载中断产生了断点记录文件后,如果需要继续下载该Object,才需要设置对应的断点记录文件。下载完成后,该文件会被删除。
            //downloadFileRequest.setCheckpointFile("D:\Downloads\12.log.dcp");
            // 下载文件。
            DownloadFileResult downloadRes = ossClient.downloadFile(downloadFileRequest);
            // 下载成功时,会返回文件元信息。
            ObjectMetadata objectMetadata = downloadRes.getObjectMetadata();
            System.out.println(objectMetadata.getETag());
            System.out.println(objectMetadata.getLastModified());
            System.out.println(objectMetadata.getUserMetadata().get("meta"));
        } catch (Exception e) {
            e.printStackTrace();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

3.2、执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1007118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

热管理系统研发服务

为了适应电动化和智能化的需求&#xff0c;汽车热管理正从传统的发动机冷却和空调系统发展至电池热管理、电机电控热管理系统以及热泵空调系统&#xff0c;以实现对座舱温度、电池温度和动力总成温度的精确控制。由于新增了繁多的、控制精度要求更高的零部件&#xff0c;使得系…

《TCP/IP网络编程》阅读笔记--多线程服务器端的实现

1--多线程的优点 多进程服务器的缺点&#xff1a; ① 创建进程的过程会带来一定的开销&#xff1b; ② 为了完成进程间的数据交换&#xff0c;需要特殊的 IPC 技术&#xff1b; ③ 进程间的上下文切换是创建进程时的最大开销&#xff1b; 多线程的优点&#xff1a; ① 线程的创…

微服务架构笔记

文章目录 简介微服务架构微服务方案对比注册中心 简介 SpringCloud&#xff08;多种框架组件技术集合的总框架&#xff09;笔记 传统单体架构VS微服务分布式架构 单体架构特点? 简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。例如:学生管理系…

VMware Workstation虚拟机网络配置及配置自动启动

目录 一、网络配置二、配置自动启动1.VMware 中配置虚拟机自启动2.系统服务中配置 VMware 服务自启动 一、网络配置 本文将虚拟机 IP 与主机 IP 设置为同一个网段。 点击 “编辑” -> “虚拟网络编辑器(N)…”&#xff1a; 点击 “更改设置”&#xff1a; 将 VMnet0 设置…

Linux下安装和使用MySQL的详细教程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

机器学习入门案例(2)之使用逻辑回归预测房子是否能被租出去

大家好&#xff0c;我是邵奈一&#xff0c;一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为&#xff1a;被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年&#xff0c;我整理了很多IT技术相关的教程给大家&#xff0…

gitlab操作

1. 配置ssh 点击访问 2. 创建新分支与切换新分支 git branch 新分支名 // 创建 git checkout 新分支名 // 切换到新分支3. 查看当前分支 git branch*所指的就是当前所在分支 4. 本地删除文件后与远程git同步 git add -A git commit -m "del" git push

编码转换流

同理&#xff0c;创建f1和f2方法&#xff0c;分别测试OutputStreamWriter和InputStreamReader 也是主要分三步&#xff0c;即1创建流 2使用流 3关流 OutputStreamWriter f1方法 因为要操作流&#xff0c;所以先创建一个try-catch-finally结构&#xff0c;创建流对象Out…

【2596. 检查骑士巡视方案】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并且访问棋盘上的每个格子 恰好一次 。 给你一个 n x n 的整数矩阵 grid &#xff0c;由范…

无涯教程-JavaScript - ISERR函数

描述 如果ISERR函数引用的是Excel错误(&#xff03;N/A错误除外),则ISERR函数返回逻辑值TRUE。否则返回FALSE。 语法 ISERR (value)争论 Argument描述Required/OptionalvalueAn errorRequired Notes 此函数在公式中用于测试计算输出很有用。与IF函数结合使用时,此函数提供…

综合能力 ---- 2. 法律法规

1. 法律法规 1.1 电信条例 电信条例概述电信市场规定电信服务规定电信建设规定电信安全规定 1.2 网间互联管理规定 网间互联概述经营者的互联义务互联时限 1.3 网络安全法 网络安全法概述网络运行安全规定网络信息安全规定 2. 电信条例修订的目的 《电信条例》于2016年做…

fatal error: linux/compiler-gcc9.h: No such file or directory

linux 找到README文件 cd /mnt/e/CLionProjects/linux-3.10.99/linux-3.10.99 sudo useradd linux3x sudo passwd linux3x sudo mkdir /home/linux3x sudo chown linux3x:linu3x /home/linux3x sudo chmod 755 /home/linux3x su - linux3x mkdir ~/build mkdir ~/build/kerne…

精品基于NET实现的民族文化宣传网站

《[含文档PPT源码等]精品基于NET实现的民族文化宣传网站》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发软件&#xff1a;VS 2017 &#xff08;版本2017以上即可&#xff0c;不能低于2017&#xff09; 数…

python 语法入门

文章目录 前言python 语法入门1. 语句分隔符2. 注释3. pep8规范4. 变量5. 扩展5.1. 运行此行代码的过程 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会…

分享一下在微信小程序上怎么实现投票功能

微信小程序已经成为一种非常受欢迎的移动应用&#xff0c;可以通过它来实现各种功能&#xff0c;包括投票功能。下面&#xff0c;我们将为大家详细介绍如何在微信小程序上实现投票功能。 一、确定投票功能的目标 在策划投票功能之前&#xff0c;需要明确自己的目标。目标可以是…

【python】CliffWalking悬崖寻路问题

强化学习 简介gym库-CliffWalkingSARSAQ-learning 示例SARSAQ-learning 简介 机器学习&#xff1a;监督学习、非监督学习、强化学习 模仿人类和动物的试错机制进行学习智能体与环境交互&#xff0c;根据当前的环境状态s&#xff0c;按照一定策略采取行动a&#xff0c;获得回报r…

使用 CSS 伪类的attr() 展示 tooltip

效果图: 使用场景: 使用React渲染后台返回的数据, 遍历以列表的形式展示, 可能简要字段内容需要鼠标放上去才显示的 可以借助DOM的自定义属性和CSS伪类的attr来实现 所有代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-…

Linux之文本搜索工具--grep

目录 Linux之文本搜索工具--grep 作用 格式 参数 注意 示例 操作对象文件&#xff1a;/etc/passwd grep过滤命令示例 Linux之文本搜索工具--grep 作用 grep是linux中一种强大的文件搜索过滤工具&#xff0c;可以按照正则表达式检索文件内容&#xff0c;并把匹配的结果显…

Ubuntu安装与配置MySQL简要记录

目标 前置条件&#xff1a;Virtualbox虚拟机下Ubuntu20.04 目标MySQL版本&#xff1a;8.0.34 目标效果&#xff1a;安装并配置MySQL&#xff0c;开启远程连接且使用windows下的DataGrip进行管理 安装 sudo apt install mysql-server 通过apt安装的mysql只需一行&#xff0c;…

LeetCode——动态规划篇(一)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 目录 509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&a…