主题切换
文件上传
在OSCA-OSS中用户的基本操作单元是对象,亦可以理解为文件,S3 GO SDK提供了丰富的上传接口,可以通过以下的方式上传文件:
- 流式上传
- 本地文件上传
流式上传
通过PutObject方法上传对象。示例代码如下:
python
import boto3
import httpx
import io
endpoint='https://fgws3-ocloud.ihep.ac.cn'
aws_access_key_id="AccessKeyId"
aws_secret_access_key="AccessKeySecret"
s3_client = boto3.client(
's3',
endpoint_url=endpoint,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name= 'us-east-1',
use_ssl=True #当网关为http://开头的时候则为False
)
REMOTEDIR = ""
REMOTEBUCKET = "20015-zk3333"
# 获取下载链接的数据
def get_data_from_url(url):
with httpx.Client() as client:
return client.get(url)
# 通过下载链接上传数据
def upload_from_url(url, name):
object_name = REMOTEDIR + name
response = get_data_from_url(url)
# 检查请求是否成功
if response.status_code == 200:
data_stream = io.BytesIO(response.content)
# 将响应内容直接上传到 S3
s3_client.put_object(
Bucket=REMOTEBUCKET,
Key=object_name,
Body=data_stream,
# ContentLength=len(response.content),
ContentType=response.headers['Content-Type']
)
# 获取预签名URL
presigned_url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': REMOTEBUCKET, 'Key': object_name},
ExpiresIn=3600 # 设置URL的有效期,这里设置为1小时
)
print(f"下载链接: {presigned_url}")
return presigned_url
else:
print(f"下载失败,状态码: {response.status_code}")
return None
# 调用
upload_from_url("https://example.com/file", "remote")
本地文件上传
python
import boto3
endpoint='https://fgws3-ocloud.ihep.ac.cn'
aws_access_key_id="AccessKeyId"
aws_secret_access_key="AccessKeySecret"
s3_client = boto3.client(
's3',
endpoint_url=endpoint,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name= 'us-east-1',
use_ssl=True #当网关为http://开头的时候则为False
)
REMOTEDIR = ""
REMOTEBUCKET = "20015-zk3333"
def upload(file, name):
object_name = REMOTEDIR + name
s3_client.upload_file(file, REMOTEBUCKET, object_name)
presigned_url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': REMOTEBUCKET, 'Key': object_name},
ExpiresIn=3600 # 设置URL的有效期,这里设置为1小时
)
print(f"下载链接: {presigned_url}")
return presigned_url
}
#使用示例
upload("/path/to/file","remote")