更新时间:2023-11-08 GMT+08:00
分享

下载对象

功能说明

下载指定桶中的对象。

方法定义

ObsClient.getObject

请求参数

字段名

类型

约束

说明

Bucket

String

必选

桶名。

Key

String

必选

对象名。

VersionId

String

可选

对象的版本号。

ProgressCallback

Function

可选

获取下载进度的回调函数。

说明:

该回调函数依次包含三个参数:已下载字节数、总字节数、已使用的时间(单位:秒)。

IfMatch

String

可选

如果对象的ETag值与该参数值相同,则返回对象内容,否则返回异常码。

IfModifiedSince

String

可选

如果对象的修改时间晚于该参数值指定的时间,则返回对象内容,否则返回异常码。该参数值必须符合http://www.ietf.org/rfc/rfc2616.txt规定的HTTP时间格式。

IfNoneMatch

String

可选

如果对象的ETag值与该参数值不相同,则返回对象内容,否则返回异常码。

IfUnmodifiedSince

String

可选

如果对象的修改时间早于该参数值指定的时间,则返回对象内容,否则返回异常码。该参数值必须符合http://www.ietf.org/rfc/rfc2616.txt规定的HTTP时间格式。

Range

String

可选

指定下载的范围,取值区间:[0,对象长度-1],格式:bytes=x-y。如果Range的最大长度超出对象长度-1,仍旧取对象长度-1。

Origin

String

可选

预请求指定的跨域请求Origin(通常为域名)。

RequestHeader

String

可选

跨域请求可以使用的HTTP头域。

ResponseCacheControl

String

可选

重写响应中的Cache-Control头。

ResponseContentDisposition

String

可选

重写响应中的Content-Disposition头。

ResponseContentEncoding

String

可选

重写响应中的Content-Encoding头。

ResponseContentLanguage

String

可选

重写响应中的Content-Language头。

ResponseContentType

String

可选

重写响应中的Content-Type头。

ResponseExpires

String

可选

重写响应中的Expires头。

ImageProcess

String

可选

图片处理参数。

SaveAsFile

String

可选

下载对象的目标路径,包含文件名。

SaveAsStream

Boolean

可选

是否将对象以流(stream.Readable)的形式返回。

SseC

String

可选

以SSE-C方式解密对象,支持的值:

  • AES256

SseCKey

Buffer

可选

SSE-C方式下解密的密钥,由AES256算法算出。

  • SaveAsFile和SaveAsStream不能同时使用。
  • 如果包含IfUnmodifiedSince并且不符合或者包含IfMatch并且不符合,抛出异常中HTTP状态码为:412 precondition failed。
  • 如果包含IfModifiedSince并且不符合或者包含IfNoneMatch并且不符合,抛出异常中HTTP状态码为:304 Not Modified。

返回结果(InterfaceResult)

字段名

类型

说明

RequestId

String

OBS服务端返回的请求ID。

DeleteMarker

String

标识删除的对象是否是删除标记。

LastModified

String

对象的最近一次修改时间。

ContentLength

String

对象数据的长度。

CacheControl

String

响应中的Cache-Control头。

ContentDisposition

String

响应中的Content-Disposition头。

ContentEncoding

String

响应中的Content-Encoding头

ContentLanguage

String

响应中的Content-Language头

ContentType

String

对象的MIME类型。

Expires

String

响应中的Expires头。

ETag

String

对象的ETag值。

VersionId

String

对象的版本号。

WebsiteRedirectLocation

String

当桶设置了Website配置,该参数指明对象的重定向地址。

StorageClass

String

对象的存储类型,当对象存储类型是标准存储时,该值为空。

Restore

String

归档存储类型对象的取回状态。

AllowOrigin

String

如果请求中的Origin满足桶的CORS规则,则返回CORS规则中的AllowedOrigin。

AllowHeader

String

如果请求的RequestHeader满足桶的CORS规则,则返回CORS规则中的AllowedHeader。

AllowMethod

String

桶CORS规则中的AllowedMethod。

ExposeHeader

String

桶CORS规则中的ExposeHeader。

MaxAgeSeconds

String

桶CORS规则中的MaxAgeSeconds。

SseKms

String

SSE-KMS方式的算法。

SseKmsKey

String

SSE-KMS方式的主密钥。

SseC

String

SSE-C方式的算法。

SseCKeyMd5

String

SSE-C方式的密钥的MD5值。

Expiration

String

对象的详细过期信息。

Content

String

stream.Readable

对象的内容。当设置了SaveAsFile时该值为空;当设置了SaveAsStream且为true时该值为stream.Readable对象;当SaveAsFile和SaveAsStream都未设置时为Buffer对象。

Metadata

Object

对象自定义元数据。

代码样例

本示例用于范围下载examplebucket桶里的objectname对象的0-1023字节并打印进度。

// 使用npm安装
var ObsClient = require('esdk-obs-nodejs');

// 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险
// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
const AK = process.env.AccessKeyID
const SK = process.env.SecretAccessKey
// 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
const security_token= process.env.SecurityToken
//  server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。
const server = "https://obs.cn-north-4.myhuaweicloud.com"
var obsClient = new ObsClient({
    access_key_id: AK,
    secret_access_key: SK,
    server: server,
});
const Bucket = 'examplebucket'
// 对象名
const Key = 'objectname'
// 指定下载的范围,取值区间:[0,对象长度-1],格式:bytes=x-y。如果Range的最大长度超出对象长度-1,仍旧取对象长度-1。
const Range = 'bytes=0-1023'
// 下载对象的目标路径,包含文件名。
const SaveAsFile = 'D:\\example'
try {
    obsClient.getObject({
        Bucket,
        Key,
        Range,
        SaveAsFile,
        // 进度回调
        ProgressCallback: function (transferredAmount, totalAmount, totalSeconds) {
            // 打印下载速度,单位KB/S
            console.log(transferredAmount * 1.0 / totalSeconds / 1024);
            // 打印上传百分比
            console.log(transferredAmount * 100.0 / totalAmount);
        },
        // 是否将对象以流(stream.Readable)的形式返回。
        // SaveAsStream: true
    }, (err, result) => {
        if (err) {
            console.log('GetObject Failed')
            console.error('Error-->' + err);
        } else {
            if (result.CommonMsg.Status < 300) {
                console.log('GetObject Succeeded')
                console.log('RequestId-->' + result.InterfaceResult.RequestId);
                console.log('ETag-->' + result.InterfaceResult.ETag);
                // 多版本对象独有
                console.log('VersionId-->' + result.InterfaceResult.VersionId);
                console.log('ContentLength-->' + result.InterfaceResult.ContentLength);
                // 多版本对象独有
                console.log('DeleteMarker-->' + result.InterfaceResult.DeleteMarker);
                console.log('LastModified-->' + result.InterfaceResult.LastModified);
                // 对象的存储类型,当对象存储类型是标准存储时,该值为空
                console.log('StorageClass-->' + result.InterfaceResult.StorageClass);
                // console.log('Content-->' + result.InterfaceResult.Content.toString());
                console.log('Metadata-->' + JSON.stringify(result.InterfaceResult.Metadata));
            } else {
                console.log('GetObject Failed')
                console.log('ErrorCode-->' + result.CommonMsg.Code);
                console.log('ErrorMessage-->' + result.CommonMsg.Message);
            }
        }
    });
} catch (error) {
    console.log('GetObject Failed')
    console.error('Error-->' + error);
}

相关文档