日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹如何在受版本控制的存儲(chǔ)空間(Bucket)中使用簡(jiǎn)單上傳、追加上傳或者分片上傳的方式來(lái)上傳文件(Object)。

注意事項(xiàng)

  • 本文以華東1(杭州)外網(wǎng)Endpoint為例。如果您希望通過(guò)與OSS同地域的其他阿里云產(chǎn)品訪問(wèn)OSS,請(qǐng)使用內(nèi)網(wǎng)Endpoint。關(guān)于OSS支持的Region與Endpoint的對(duì)應(yīng)關(guān)系,請(qǐng)參見(jiàn)訪問(wèn)域名和數(shù)據(jù)中心

  • 本文以從環(huán)境變量讀取訪問(wèn)憑證為例。如何配置訪問(wèn)憑證,請(qǐng)參見(jiàn)配置訪問(wèn)憑證

  • 本文以O(shè)SS域名新建OSSClient為例。如果您希望通過(guò)自定義域名、STS等方式新建OSSClient,請(qǐng)參見(jiàn)初始化

  • 要上傳文件,您必須有oss:PutObject權(quán)限。具體操作,請(qǐng)參見(jiàn)為RAM用戶授權(quán)自定義的權(quán)限策略

簡(jiǎn)單上傳

在已開(kāi)啟版本控制的Bucket中,OSS會(huì)為新添加的Object自動(dòng)生成唯一的版本ID,并在響應(yīng)header中通過(guò)x-oss-version-id形式返回。在暫停了版本控制的Bucket中,新添加的Object的版本ID為“null”,上傳同名Object,后一次會(huì)覆蓋前一次上傳的文件內(nèi)容。OSS保證同一個(gè)Object只會(huì)有一個(gè)版本ID為“null”。

以下代碼用于簡(jiǎn)單上傳:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# yourBucketName填寫存儲(chǔ)空間名稱。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# 上傳文件。
result = bucket.put_object('yourObjectName', 'content of object')
# HTTP返回碼。
print('http response code: {0}'.format(result.status))
# 查看本次上傳Object的版本ID。
print('put object version:', result.versionid)

追加上傳

在受版本控制的Bucket中,僅支持對(duì)于當(dāng)前版本為Appendable類型的Object執(zhí)行追加(AppendObject)操作,不支持對(duì)于歷史版本為Appendable類型的Object執(zhí)行AppendObject操作。

說(shuō)明
  • 對(duì)當(dāng)前版本為Appendable類型的Object執(zhí)行AppendObject操作時(shí),OSS不會(huì)為該Appendable類型的Object生成歷史版本。

  • 對(duì)當(dāng)前版本為Appendable類型的Object執(zhí)行PutObject或DeleteObject操作時(shí),OSS會(huì)將該Appendable類型的Object保留為歷史版本,且該Object不允許繼續(xù)追加。

  • 不支持對(duì)當(dāng)前版本為非Appendable類型的Object(包括Normal Object、Delete Marker等)執(zhí)行AppendObject操作。

以下代碼用于追加上傳:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# yourBucketName填寫存儲(chǔ)空間名稱。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# 設(shè)置首次上傳的追加位置(Position參數(shù))為0。
result = bucket.append_object('yourObjectName', 0, 'content of first append')
# 查看本次執(zhí)行追加文件的Object的版本ID。
print('append object versionid:', result.versionid)
# 如果不是首次上傳,可以通過(guò)bucket.head_object方法或上次追加返回值的next_position屬性,得到追加位置。
bucket.append_object('yourObjectName', result.next_position, 'content of second append')

分片上傳

在受版本控制的Bucket中,調(diào)用CompleteMultipartUpload接口來(lái)完成整個(gè)文件的分片上傳,OSS會(huì)為整個(gè)文件生成唯一的版本ID,并在響應(yīng)header中以x-oss-version-id的形式返回。

以下代碼用于分片上傳:

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2 import SizedFileAdapter, determine_part_size
from oss2.models import PartInfo
# 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# yourBucketName填寫存儲(chǔ)空間名稱。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

key = 'yourObjectName'
filename = 'yourLocalFile'

total_size = os.path.getsize(filename)
# determine_part_size方法用來(lái)確定分片大小。
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# 初始化分片。
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# 逐個(gè)上傳分片。
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
    # SizedFileAdapter(fileobj, size)方法會(huì)生成一個(gè)新的文件對(duì)象,重新計(jì)算起始追加位置。
        result = bucket.upload_part(key, upload_id, part_number,
                                    SizedFileAdapter(fileobj, num_to_upload))
        parts.append(PartInfo(part_number, result.etag))

        offset += num_to_upload
        part_number += 1

# 完成分片上傳。
result = bucket.complete_multipart_upload(key, upload_id, parts)
# 查看response中攜帶的上傳文件的versionid
print('result.versionid:', result.versionid)


# 驗(yàn)證分片上傳。
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

相關(guān)文檔

  • 關(guān)于簡(jiǎn)單上傳的API接口說(shuō)明,請(qǐng)參見(jiàn)PutObject

  • 關(guān)于追加上傳的API接口說(shuō)明,請(qǐng)參見(jiàn)AppendObject

  • 關(guān)于分片上傳的API接口說(shuō)明,請(qǐng)參見(jiàn)CompleteMultipartUpload