获取预签名文件URL
更新时间:2026-09-23
通过预签名 URL(Pre-Signed URL),您可以在不暴露 Access Key 的前提下,将对某个 Object 的临时访问授权分享给第三方。第三方在 URL 有效期内即可直接通过 HTTP 请求访问该 Object,无需再进行签名。
运行以下示例前,请先参考初始化完成 BOS Client 初始化,并将示例中的 bucket_name、key 替换为实际值。
生成预签名 URL
generate_pre_signed_url 方法根据 Object 名称、有效期等信息生成一个带签名的 URL,返回值为字符串(bytes 类型):
Python
1url = bos_client.generate_pre_signed_url(
2 bucket_name, key,
3 timestamp=0,
4 expiration_in_seconds=1800,
5 headers=None,
6 params=None,
7 headers_to_sign=None,
8 protocol=None,
9 httpmethod=http_methods.GET)
参数说明
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
bucket_name |
str | Bucket 名称。 | 是 |
key |
str | Object 名称。 | 是 |
timestamp |
int | URL 有效起始时间的时间戳。不指定时默认为当前时间。可通过 int(time.time()) 获取。 |
否 |
expiration_in_seconds |
int | URL 有效时长,单位为秒,默认为 1800。设为 -1 表示永不失效,不可设置为其他负数。 |
否 |
headers |
dict | 参与签名计算的请求头。 | 否 |
params |
dict | 参与签名计算的 query 参数,例如图片、视频处理指令 x-bce-process。 |
否 |
headers_to_sign |
set | 指定参与签名计算的 header 集合。 | 否 |
protocol |
str | 请求协议,可传 'http' 或 'https'。 |
否 |
httpmethod |
str | HTTP 方法,取值见 baidubce.http.http_methods,如 GET、PUT、HEAD、DELETE,默认为 GET。 |
否 |
说明:
- 调用前需将
endpoint设置为 Object 所属区域的域名。百度智能云开放了多区域支持,例如北京https://bj.bcebos.com、广州https://gz.bcebos.com、苏州https://su.bcebos.com等,完整列表请参考区域选择说明。- 生成的 URL 仅进行了签名,并不校验 Object 是否存在或是否有访问权限。真正访问时才会由服务端进行鉴权。
上传、下载、删除文件预签名 URL 示例
以下示例分别生成用于下载(GET)、上传(PUT)、删除(DELETE)的预签名 URL,并使用 requests 库发起 HTTP 请求:
Python
1from baidubce.http import http_methods
2import requests
3
4content = b'test pre_signed_url'
5
6# 下载文件:生成有效期为 1800 秒的 GET 预签名 URL
7url = bos_client.generate_pre_signed_url(bucket_name, key, expiration_in_seconds=1800)
8print('get object url is', url)
9resp = requests.get(url)
10
11# 上传文件:生成 PUT 预签名 URL,并通过该 URL 上传内容
12url = bos_client.generate_pre_signed_url(bucket_name, key, expiration_in_seconds=1800,
13 httpmethod=http_methods.PUT)
14print('put object url is', url)
15resp = requests.put(url, content)
16
17# 删除文件:生成 DELETE 预签名 URL
18url = bos_client.generate_pre_signed_url(bucket_name, key, expiration_in_seconds=1800,
19 httpmethod=http_methods.DELETE)
20print('delete object url is', url)
21resp = requests.delete(url)
通过 STS 临时凭证生成预签名 URL
如果通过 STS 临时凭证访问 BOS(STS 配置见初始化),同样可以生成预签名 URL:
Python
1import time
2
3# sts_bos_client 为使用 STS 临时凭证初始化的 BosClient
4timestamp = int(time.time())
5url = sts_bos_client.generate_pre_signed_url(bucket_name, key, timestamp,
6 expiration_in_seconds=3600)
7print('sts object url is', url)
携带处理参数的预签名 URL
通过 params 传入处理指令,可生成携带图片、视频等处理参数的预签名 URL。以下示例使用关键帧模式截取视频第 2 秒的内容,输出为 PNG 图片,宽 800、高 600,旋转 90 度:
Python
1bucket_name = 'example-bucket-name'
2key = 'example-object-key'
3
4params = {
5 "x-bce-process": "video/snapshot,t_2000,f_png,w_800,h_600,ar_90,m_fast"
6}
7url = bos_client.generate_pre_signed_url(bucket_name, key, expiration_in_seconds=1800,
8 params=params)
9print('get object url is', url)
方法说明
| 方法 | 返回值 | 说明 |
|---|---|---|
bos_client.generate_pre_signed_url(bucket_name, key, ...) |
bytes |
生成带签名的临时访问 URL。 |
评价此篇文章
