1. 前言
以下内容引用自雨云官方文档:
有时候我们需要使用代码控制使用对象存储,比如上传、下载文件等。如需要使用Python控制对象存储,我们可以使用Boto3框架操作。有关更多Boto3框架的操作可以参考AWS SDK for Python (Boto3)
首先我们需要在Python项目安装并引入bob3包:
pip install boto3
然后我们可以使用以下代码来连接到对象存储:
import boto3
endpoint_url = 'https://cn-sy1.rains3.com'
access_key = '填入雨云对象存储的AccessKey'
secret_key = '填入雨云对象存储的SecretKey'
s3 = boto3.client('s3',
endpoint_url=endpoint_url,
aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
#列出所有的存储桶名
responses = s3.list_buckets()
buckets = [bucket['Name'] for bucket in responses['Buckets']]
print(buckets)
配置好对象存储的key后,直接运行代码,如果配置正确并且网络通畅,你将会看到输出的存储桶名。如下:
['yemengstar','yemengtest']
有时候我们需要生成一个预签名URL,用于临时授权访问对象存储中的文件。我们可以使用以下代码来生成预签名URL(在上面的代码后面直接添加):
url = s3.generate_presigned_url( ClientMethod='get_object',
Params={
'Bucket': '存储桶名',
'Key': '文件路径'
},
ExpiresIn=3600#链接有效时间,单位秒
)
print(url)
夜梦使用自己的桶(yemengtest)和文件路径(test_folder)运行后得到如下格式的链接:
https://cn-sy1.rains3.com/yemengtest/test_folder?AWSAccessKeyId=key&Signature=6%3D&Expires=12345678
2. 实践
归根结底雨云ROS使用的是S3协议,我们只需要借助boto3就可以完成雨云对象存储(ROS)的基础操作了,例如上传图片、文件到指定文件夹指定路径中。
单个文件的上传可以使用下面的代码实现(仅作示例,完整代码夜梦在GitHub开源,小伙伴们可以去查看)
def per_file_update(filename, seen, size, percent):
# update overall uploaded bytes and progress bar incrementally
# We compute delta and add to global uploaded bytes
# For simplicity, we update progress bar to (uploaded_bytes + seen_of_current) / total
try:
# Not thread-safe perfect accuracy — fine for UI approximate progress
self._last_seen = getattr(self, '_last_seen', {})
last = self._last_seen.get(filename, 0)
delta = seen - last
self._last_seen[filename] = seen
self._uploaded_bytes += delta
overall_pct = (self._uploaded_bytes / self._total_bytes) * 100 if self._total_bytes else 0
self.progress_bar['value'] = overall_pct
except Exception:
pass
cb = ProgressPercentage(path, filesize, per_file_update)
运行界面:
endpoint URL即为API 端点,根据你存储的位置进行填写https://cn-nb1.rains3.com或者https://cn-sy1.rains3.com。
base public url可以空着。
bucket即为存储桶名,如果你要存到名为a的桶,即填写a。
prefix即为存储路径,比如你要存到a存储桶中upload文件夹,那么就填写upload。
access key和secret key填写对象存储实例的!即界面如下的访问凭证信息:
填写完成后,点击test connection测试连接性。如果一切顺利,会提示找到桶。
然后我们就可以添加文件上传了:
上传成功后,会自动复制链接到剪切板,如果需要访问,在开启存储示例与存储桶的公共访问后,既可在浏览器中直接访问。