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

目录

    • 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 = "";

    /**
     * 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 = "";
    private static String accessKeySecret = "";

    /**
     * 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 = "";

    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、执行结果

阿里云OSS文件上传下载【专栏】------文件下载(二)_第1张图片

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 = "";

    /**
     * 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 = "";
    private static String accessKeySecret = "";

    /**
     * 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 = "";

    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、执行结果

阿里云OSS文件上传下载【专栏】------文件下载(二)_第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 = "";

    /**
     * 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 = "";
    private static String accessKeySecret = "";

    /**
     * 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 = "";

    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、执行结果

阿里云OSS文件上传下载【专栏】------文件下载(二)_第3张图片

你可能感兴趣的:(OSS,Java基础,阿里云,数据库,云计算)