TOS中如何使用预签名URL上传/下载对象

问题描述

默认情况下,所有存储桶和对象都是私有的,如何允许没有凭证的客户/用户将对象上传到桶或者从桶中下载对象

问题分析

预签名URL是一种持有者令牌,可向拥有这些URL的客户授予访问权限,我们可以通过预签名URL来实现

解决方案

本文将使用TOS python SDK 实现上传跟下载,先生成预签名URL,然后再使用生成的预签名URL进行上传/下载,具体如下

使用presign url进行对象上传

创建预签名 URL 时,您必须提供安全凭证,然后指定一个存储桶名称、一个对象键、一个 HTTP 方法(对上传对象执行 PUT 操作)和一个截止日期和时间。

1、生成预签名URL

import tos


ak = "xxxxxx" # 修改实际AK
sk = "xxxxxx" # 修改为实际SK
endpoint = "tos-cn-beijing.volces.com"
region = 'cn-beijing'
bucket = "xxxx" # 修改为实际桶名
key = "a.sh" # 要上传的对象名


client = tos.TosClient(tos.Auth(ak, sk, region), endpoint)

url = client.generate_presigned_url(Method='PUT', Bucket=bucket, Key=key, ExpiresIn=86400)

# print the url
print(url)

2、客户端使用request构造post请求通过presign_url上传对象

import requests

url = "http://xxxx.tos-cn-beijing.volces.com/a.sh?X-Tos-Algorithm=TOS4-HMAC-SHA256&X-Tos-Credential=xxxxxx%2Fcn-beijing%2Ftos%2Frequest&X-Tos-Date=20211203T065244Z&X-Tos-Expires=86400&X-Tos-SignedHeaders=host&X-Tos-Signature=xxxxxx" # 步骤1中生成的url

object_name = "/root/TOS/a.sh" # 要上传对象的路径

with open(object_name,'rb') as f:
    http_rsp = requests.put(url,data=f)
    print(http_rsp)
    print(http_rsp.content)

3、查看桶中对象是否上传成功

使用预签名URL下载

当为对象创建预签名的 URL 时,必须提供安全凭证、指定存储桶名称和对象键、指定 HTTP 方法(指定为 GET 以下载对象)和过期日期和时间。

1、生成预签名URL

import tos
import sys


ak = "xxxxxx"
sk = "xxxxxx"
endpoint = "tos-cn-beijing.volces.com"
region = 'cn-beijing'
bucket = "xxxx"
key = "a.sh"

client = tos.TosClient(tos.Auth(ak, sk, region), endpoint)

url = client.generate_presigned_url(Method='GET', Bucket=bucket, Key=key, ExpiresIn=86400)

print(url)

2、使用上面步骤生成的URL进行下载,直接复制到浏览器或者使用wget、curl等客户端工具。

如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
大模型解决方案白皮书:社交陪伴场景全流程落地指南
随着大模型技术持续突破,AI正加速重塑社交娱乐的形态与体验。其中,陪伴式聊天因用户黏性强、互动频次高,成为大模型商业化落地的关键赛道。随着模型能力跃升至万亿参数级,AI从工具属性正迈向情感交互生态,现象级产品的诞生条件逐渐成熟。 本白皮书聚焦AI陪伴聊天应用开发,面向“从何起步、如何落地”的新手困惑,系统拆解从需求定义到产品上线的关键流程。我们结合工程化实践路径,打造模块化知识体系与渐进式开发框架,帮助开发者在30天内完成从技术认知到产品原型的跃升,快速构建具备基础交互能力的Web或App应用,迈出大模型
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论