您的位置:

阿里云OSS下载详解

阿里云对象存储(Object Storage Service,简称OSS)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。在使用过程中,对象的上传和下载是最基础的功能之一。本文将从多个方面介绍OSS的下载功能,包括下载文件、下载链接、失败解决、费用等问题。

一、OSS下载文件

在使用OSS进行文件下载时,我们需要先了解下载文件的方法,本节将对OSS下载文件的方法进行阐述。

Java SDK下载示例:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// AccessKeyId和AccessKeySecret请登录控制台查找或联系管理员获取
String accessKeyId = "";
String accessKeySecret = "
   ";
// Bucket名称
String bucketName = "
    ";
// Object完整路径
String objectName = "
     ";

// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 下载Object到文件
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("
      "));

// 关闭OSSClient
ossClient.shutdown();

      
     
    
   
  

Python SDK下载示例:

import oss2
# 阿里云AccessKeyId、AccessKeySecret和Endpoint
access_key_id = ''
access_key_secret = '
   '
endpoint = '
    '
# Bucket名称和Object完整路径
bucket_name = '
     '
object_name = '
      '
# 下载文件
auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, bucket_name)
bucket.get_object_to_file(object_name, '
       
        ')
       
      
     
    
   
  

二、阿里云OSS下载链接

在使用OSS进行文件下载时,我们可以直接生成已签名URL链接,并将链接分享给他人,以供他人进行下载。

Java SDK生成已签名URL链接示例:

// Endpoint以杭州为例,其它Region请按实际情况填写
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// AccessKeyId和AccessKeySecret请登录控制台查找或联系管理员获取
String accessKeyId = "";
String accessKeySecret = "
   ";
// Bucket名称
String bucketName = "
    ";
// Object完整路径
String objectName = "
     ";

// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 设置URL过期时间为1小时
Date expiration = new Date(new Date().getTime() + 3600 * 1000);

// 生成以HTTP GET方法访问的签名URL,URL有效期为1小时
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration, HttpMethod.GET);

// 关闭OSSClient
ossClient.shutdown();

     
    
   
  

Python SDK生成已签名URL链接示例:

import oss2
# 阿里云AccessKeyId、AccessKeySecret和Endpoint
access_key_id = ''
access_key_secret = '
   '
endpoint = '
    '
# Bucket名称和Object完整路径
bucket_name = '
     '
object_name = '
      '

# 设置URL过期时间为1小时
expires = 3600
auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# 生成以HTTP GET方法访问的签名URL,URL有效期为1小时
url = bucket.sign_url('GET', object_name, expires)

print url

      
     
    
   
  

三、OSS下载文件失败

在使用OSS进行文件下载时,由于一些原因可能会导致文件下载失败,下面列举几种常遇到的问题,并提供解决方案:

1. AccessKeyId和AccessKeySecret错误

如果您在下载文件时遇到错误信息:“The OSS Access Key Id you provided does not exist in our records.”,这表明您输入的AccessKeyId或AccessKeySecret错误。

解决方法:请重新输入正确的AccessKeyId和AccessKeySecret。

2. Bucket不存在或Object不存在

如果您在下载文件时遇到错误信息:“The bucket you are attempting to access must be addressed using the specified endpoint.” 或 “The specified key does not exist.”,这表明您输入的Bucket名称或Object名称错误。

解决方法:请检查Bucket名称和Object名称是否正确。

四、阿里云OSS下载费用

在使用OSS进行文件下载时,需要根据实际情况了解OSS的下载费用,以便选择最优的下载方式。

OSS的下载费用由以下三个因素确定:

1. 下载流量

根据下载流量计算费用,OSS在指定地点的下载流量最低为0.12元/GB。下载流量和单价可以在阿里云OSS官网上查询。

2. 请求次数

当用户请求下载OSS的一个文件时,服务器会收到一个请求。OSS的请求次数和请求类型决定了其费用,详见阿里云OSS计费说明。

3. 存储空间

存储空间是指用于存放用户数据的空间,OSS的存储空间费用按存储量计费。OSS的存储费用可以在阿里云OSS官网上查询。

五、其他问题探讨

1. OSS下载PDF文件

当需要从OSS下载PDF文件时,我们可以使用OSS提供的getStream方法获取流,从而进行下载。

Java SDK下载PDF文件示例:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// AccessKeyId和AccessKeySecret请登录控制台查找或联系管理员获取
String accessKeyId = "";
String accessKeySecret = "
   ";
// Bucket名称
String bucketName = "
    ";
// Object完整路径
String objectName = "
     ";

// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 下载Object到流
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
InputStream inputStream = ossObject.getObjectContent();

// 从流中读取PDF并转存到本地文件
FileOutputStream output = new FileOutputStream("
      ");
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
    output.write(buffer, 0, n);
}
output.close();

// 关闭OSSClient
ossClient.shutdown();

      
     
    
   
  

2. OSS下载doc文件

当需要从OSS下载doc文件时,我们可以使用OSS提供的getStream方法获取流,从而进行下载。

Java SDK下载doc文件示例:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// AccessKeyId和AccessKeySecret请登录控制台查找或联系管理员获取
String accessKeyId = "";
String accessKeySecret = "
   ";
// Bucket名称
String bucketName = "
    ";
// Object完整路径
String objectName = "
     ";

// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 下载Object到流
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
InputStream inputStream = ossObject.getObjectContent();

// 从流中读取doc并转存到本地文件
FileOutputStream output = new FileOutputStream("
      ");
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
    output.write(buffer, 0, n);
}
output.close();

// 关闭OSSClient
ossClient.shutdown();

      
     
    
   
  

3. OSS下载到了哪里

在进行文件下载时,OSS会将文件下载到本地目录中,具体路径请查看下载代码中的文件路径设置。

4. OSS下载文件名选取

在进行文件下载时,文件名选取应根据实际业务需求进行制定,文件名应表达清晰、简明准确。