阿里云对象存储(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下载文件名选取
在进行文件下载时,文件名选取应根据实际业务需求进行制定,文件名应表达清晰、简明准确。