操作场景
您可以使用对象分享功能,通过对象的临时URL将存放在OBS中的对象分享给所有用户。
背景知识
实际业务场景下,您可能会需要将文件临时分享给其他人或者将文件永久共享给其他人。
- 临时分享:
通过文件的临时URL直接将其分享给其他用户。文件分享强调临时性,所有分享的URL都是临时URL,存在有效期。
临时URL是由文件的访问域名和临时鉴权信息组成。示例如下:
https://bucketname.obs.cn-north-4.myhuaweicloud.com:443/image.png?AccessKeyId=xxx&Expires=xxx&x-obs-security-token=xxx&Signature=xxx
临时鉴权信息主要包含AccessKeyId、Expires、x-obs-security-token和Signature四个参数。其中AccessKeyId、x-obs-security-token和Signature用于鉴权,Expires定义鉴权的有效期。
临时鉴权的方法及各参数的详细解释,请参见《对象存储服务API参考》的URL中携带签名章节。
- 永久共享:
通过将对象权限设置为匿名用户读取权限,通过分享对象URL,匿名用户通过分享的链接地址可访问对象数据。设置权限请参见对匿名用户授予指定对象的公共读权限。
对象类型不同,通过浏览器访问该对象的方式不同。例如:.txt、.html等文件可直接通过浏览器打开浏览,而.exe、.dat等文件则会在浏览器打开时,自动下载到本地。
获取对象访问URL请参见如何获取对象访问路径?
操作失败请参见通过URL访问对象失败进行处理。
约束与限制
- 临时分享文件不需要授权码。临时分享文件夹中的提取码分享方式需要授权码,详情请参见分享文件夹。
- 临时分享文件的URL有效期如下:
支持的使用方式 |
有效期 |
控制台 |
取值范围为1分钟到18小时。
当对对象执行“分享”之后,OBS就会以默认5分钟的有效期获取临时鉴权信息,并生成分享链接,此时链接就已经生效并且开始计算时间了。每调整一次URL有效期,OBS就会重新获取一次鉴权信息以生成新的分享链接,新链接的有效期从调整的时候开始计算。
如果想要设置更长的有效期,建议使用客户端工具OBS Browser+,OBS Browser+最长支持1年的有效期。如果想要设置永久的权限,请通过桶策略向所有用户授予对象的只读权限。 |
SDK |
通过参数“Expires”设置临时授权失效的时间,临时授权失效的时间最长为20年。 |
API |
通过参数“Expires”设置临时授权失效的时间,临时授权失效的时间最长为20年。 |
OBS Browser+ |
使用账号密码登录时,分享的有效期最长只有24小时,默认10小时。
如果需要更长的有效期,请使用永久AK/SK方式登录。 |
obsutil |
通过附加参数“e”设置生成的对象下载链接的过期时间(单位:秒),最小值为60秒,默认为300秒,设置的过期时间没有上限。 |
- 仅桶版本号为3.0的桶支持文件分享功能。查询桶版本号方法请参见OBS 2.0和OBS 3.0的判断方法。
- 归档存储对象需恢复后才能分享。
- 深度归档存储对象需恢复后才能分享。
- 分享文件特性发布区域:除西南-贵阳一以外的所有区域均已发布
使用方式
OBS支持通过控制台、API、SDK、OBS Browser+、obsutil方式分享对象。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在OBS管理控制台桶列表中,单击待操作的桶,进入“对象”页面。
- 选中待分享的文件,并单击右侧的“分享”,系统弹出如图1所示对话框。
此时,链接信息中的链接就已经生效并开始计时,有效期为默认的5分钟。修改URL有效期,链接会相应变化,新链接的有效期从修改时开始计算。
图1 分享文件
- URL相关操作。
- 单击“打开URL”,将在新页面打开文件进行预览或者直接下载文件到本地。
- 单击“复制链接”,您可以将该链接分享给所有用户,用户可以在浏览器中通过此链接直接访问文件。
- 单击“复制路径”,您可将该路径分享给所有拥有对象所在桶权限的用户,用户可以在对应桶中的文件搜索框中输入该路径搜索并访问文件。
使用图形化工具OBS Browser+
- 登录OBS Browser+。
- 选中待配置的对象,单击需要共享的对象右侧的图标,如下图2、图3所示。
图2 分享文件
图3 分享文件夹
- 单击“复制链接”,将该对象链接地址复制到浏览器中打开,即可访问该对象。
对于存储类别为归档存储的桶中的对象,如果要让匿名用户通过URL访问,则需要先确认对象的状态是否为“已恢复”。
基于安全合规要求,华为云对象存储服务OBS禁止通过OBS的默认域名在线预览桶内对象,即使用分享链接从浏览器访问桶内对象(如视频、图片、网页等)时,不会显示对象内容,而是以附件形式下载。解决方案请参考:如何在浏览器中在线预览OBS中的对象?
使用命令行工具obsutil
命令结构:
- Windows操作系统
- 生成单个对象的下载链接
obsutil sign obs://bucket/key [-e=300] [-config=xxx] [-endpoint=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 按对象名前缀批量生成对象的下载链接
obsutil sign obs://bucket[/key] -r [-e=300] [-timeRange=time1-time2] [-include=*.xxx] [-exclude=*.xxx] [-o=xxx] [-config=xxx] [-endpoint=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- macOS/Linux操作系统
- 生成单个对象的下载链接
./obsutil sign obs://bucket/key [-e=300] [-config=xxx] [-endpoint=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 按对象名前缀批量生成对象的下载链接
./obsutil sign obs://bucket[/key] -r [-e=300] [-timeRange=time1-time2] [-include=*.xxx] [-exclude=*.xxx] [-o=xxx] [-config=xxx] [-endpoint=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
运行示例:
- 以Windows操作系统为例,运行obsutil sign obs://bucket-test/test.txt,生成单个对象下载链接。
obsutil sign obs://bucket-test/test.txt
Download url of [obs://bucket-test/test.txt] is:
http://your-endpoint/bucket-test/test.txt?AccessKeyId=xxxx&Expires=1552548758&Signature=xxxx
- 以Windows操作系统为例,运行obsutil sign obs://bucket-test/test/ -r,批量生成对象下载链接。
obsutil sign obs://bucket-test/test/ -r
Generate download urls for objects .
Generate the download url(s) for the objects in the bucket [bucket-test] finished
Task id: af4dc692-6a88-4541-8156-ff1a889d2288
- 由于可能存在对象数量庞大的场景,OBS Util会将对象的下载链接归档到结果清单文件目录下具体的文件,该文件名与Task Id相关联,比如上例的Task Id为af4dc692-6a88-4541-8156-ff1a889d2288,那么存在sign_succeed_report_{时间戳}_af4dc692-6a88-4541-8156-ff1a889d2288.txt文件。
- 结果清单文件目录默认为用户目录的子文件夹.obsutil_output,也可以通过-o参数指定生成目录。
参数说明:
参数 |
约束 |
描述 |
bucket |
必选 |
桶名。 |
key |
可选 |
生成单个对象下载链接的对象名,或批量生成对象下载链接的对象名前缀。 |
e |
附加参数,可选 |
生成的对象下载链接的过期时间(单位:秒),最小值为60秒,默认为300秒。 |
r |
附加参数,批量生成时必选 |
按指定的对象名前缀批量生成对象的下载链接。 |
exclude |
附加参数,批量生成时可选 |
不包含对象的匹配模式,如:*.txt。
说明:
- 支持“*”匹配多个任意字符和“?”匹配单个任意字符,例如abc*.txt代表匹配以abc开头以.txt结尾的任意文件。
- 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。
- 如果待下载的对象名匹配该参数,则跳过该对象的复制。
须知:
- 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。
- 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。
- 该匹配模式仅适用于对象名非“/”结尾的对象。
- 支持指定多个exclude参数,如-exclude=*.xxx -exclude=*.xxx
|
include |
附加参数,批量生成时可选 |
包含对象的匹配模式,如:*.jpg。
说明:
- 支持“*”匹配多个任意字符和“?”匹配单个任意字符。
- 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。
- 首先执行exclude的匹配规则,如果待下载的对象名不匹配exclude,则判断待下载的对象名是否匹配该参数,如果匹配则下载该对象,否则跳过该文件的下载。
须知:
- 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。
- 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。
- 该匹配模式仅适用于对象名非“/”结尾的对象。
- 支持指定多个include参数,如-include=*.xxx -include=*.xxx
|
timeRange |
附加参数,可选 |
生成对象下载链接时的时间段匹配模式,仅生成最后修改时间在该时间段内对象的链接。
该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。
说明:
- 该匹配模式表示的时间是UTC时间。
- 该匹配模式仅适用于对象名非“/”结尾的对象。
- 使用“time1-time2”,代表匹配的时间段,其中time1必须小于等于time2,格式为yyyyMMddHHmmss。
- 时间格式支持自动补全,例如yyyyMMdd等价于yyyyMMdd000000,yyyyMM等价于yyyyMM01000000。
- 使用“*-time2”,代表匹配最后修改时间在time2之前的所有文件,使用“time1-*”,代表匹配最后修改时间time1之后的所有文件。
|
o |
附加参数,批量生成时可选 |
生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果和失败结果两个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。
|
config |
附加参数,可选 |
运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 |
endpoint |
附加参数,可选 |
指定终端节点。 |
i |
附加参数,可选 |
指定用户的AK。 |
k |
附加参数,可选 |
指定用户的SK。 |
t |
附加参数,可选 |
指定用户的securitytoken。 |