RDS可以和OSS搭配使用,组成多类型数据存储解决方案。
OSS是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。RDS可以和OSS搭配使用,例如当业务应用为论坛时,RDS搭配OSS使用,注册用户的图像、帖子内容的图像等资源可以存储在OSS中,以减少RDS的存储压力。
代码示例
OSS与RDS搭配使用示例,基于Python 3.6编写。
OSS Python SDK安装指导,请参见安装。
配置环境变量。
Linux/macOS系统Windows系统export OSS_ACCESS_KEY_ID=STS.xxxxxx export OSS_ACCESS_KEY_SECRET=xxxxxx export OSS_SESSION_TOKEN=xxxxxx
set OSS_ACCESS_KEY_ID=STS.xxxxxx set OSS_ACCESS_KEY_SECRET=xxxxxx set OSS_SESSION_TOKEN=xxxxxx
临时凭证需通过STS服务获取,有效期通常为1小时,建议通过RAM角色自动轮转凭证。
初始化oss2.Bucket类。
#!/usr/bin/env python import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 使用V4签名和环境变量凭证 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写实际Endpoint(需包含HTTPS协议) endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # 华东1示例 # 必须指定Region并创建Bucket实例 bucket = oss2.Bucket( auth, endpoint, 'examplebucket', region='cn-hangzhou' # 与Endpoint对应的地域 )
上传Object。
# 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。 # 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 # 上传info_old.txt文件对象 res1 = bucket.put_object_from_file("info_key.txt", "info_old.txt") print("res1-{0}".format(res1.status)) # 上传picture_old.png图片对象 res2 = bucket.put_object_from_file("picture_key.png", "picture_old.png") print("res2-{0}".format(res2.status))
获取对应Object。
# 填写Object完整路径,完整路径中不包含Bucket名称,例如info_key.txt。 # 下载Object到本地文件,并保存到指定的本地路径D:\\info_new.txt。如果指定的本地文件存在,则会覆盖该文件,不存在则新建文件。 res3 = bucket.get_object_to_file("info_key.txt", "D:\\info_new.txt") print("res2-{0}".format(res3.status)) res4 = bucket.get_object_to_file("picture_key.png", "D:\\picture_new.png") print("res4-{0}".format(res4.status))
ECS应用代码中,RDS中存储了每个用户的id,而用户对应的头像资源存储于OSS中,以简单的Python代码为例:
#!/usr/bin/env python
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import mysql_client
def conn_client():
sql = "SELECT id FROM users LIMIT 1" # 假设从users表获取用户ID
# 使用V4签名和标准凭证提供器
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 修正协议头
bucket = oss2.Bucket(auth, endpoint, 'oss-wwjtest', region='cn-hangzhou')
# 执行数据库查询
user_id = mysql_client.fetch_one(sql) # 确保fetch_one返回单个值
object_path = f"{user_id}.png" # 需正确定义object名称
local_path = f"your_path/{object_path}" # 需替换实际路径
# 下载对象
bucket.get_object_to_file(object_path, local_path)
# 上传对象
bucket.put_object_from_file(object_path, local_path)
if __name__ == '__main__':
conn_client()
该文章对您有帮助吗?
- 本页导读 (1)
- 代码示例