put_object
メソッドを使用して、1つのオブジェクトをアップロードできます。 この方法はシンプルアップロードと呼ばれます。 シンプルアップロードを使用して、文字列、バイト、Unicode文字、ネットワークストリーム、およびローカルファイルのデータをアップロードできます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
簡単なアップロードを実行するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
使用上の注意
既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、既存のオブジェクトはアップロードされたオブジェクトによって上書きされます。
次の表に、オブジェクトをアップロードするときに設定する必要がある一般的なパラメーターを示します。
パラメーター | 説明 |
bucket_name | バケットの名前です。 バケットの名前は、次の命名規則に準拠している必要があります。
|
object_name | アップロードするオブジェクトのフルパス。 バケット名をフルパスに含めないでください。 オブジェクト名は次の規則に従う必要があります。
|
文字列のアップロード
次のコードは、examplebucketという名前のバケット内のexampleobject.txtという名前のオブジェクトに文字列をアップロードする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Upload the object.
# You can configure the x-oss-storage-class and x-oss-object-acl headers for put_object to specify the storage class and access control list (ACL) of the object that you want to upload.
# headers = dict()
# headers["x-oss-storage-class"] = "Standard"
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
# Specify the full path of the object and the string that you want to upload. Do not include the bucket name in the full path.
# result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers=headers)
result = bucket.put_object('exampleobject.txt', 'Hello OSS')
# Display the returned HTTP status code.
print('http status: {0}'.format(result.status))
# Display the request ID. A request ID uniquely identifies a request. We recommend that you add this parameter to the logs.
print('request_id: {0}'.format(result.request_id))
# Display the ETag value returned by the put_object method. The ETag value of an object is used to identify the object content.
print('ETag: {0}'.format(result.etag))
# Display the HTTP response headers.
print('date: {0}'.format(result.headers['date']))
バイトのアップロード
次のコードは、examplebucketという名前のバケット内のexampleobject.txtという名前のオブジェクトにバイトをアップロードする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Specify the full path of the object and the bytes that you want to upload. Do not include the bucket name in the full path.
bucket.put_object('exampleobject.txt', b'Hello OSS')
Unicode文字のアップロード
次のコードでは、examplebucketという名前のバケット内のexampleobject.txtという名前のオブジェクトにUnicode文字をアップロードする方法の例を示します。 Unicode文字をアップロードすると、OSSは文字をUTF-8-encodedバイトに変換します。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Specify the full path of the object and the Unicode characters that you want to upload. Do not include the bucket name in the full path.
bucket.put_object('exampleobject.txt', u'Hello OSS')
Upload a network stream
次のコードは、examplebucketという名前のバケット内のexampleobject.txtという名前のオブジェクトにネットワークストリームをアップロードする方法の例を示しています。 OSSは、チャンクエンコーディングによってネットワークストリームを反復可能なオブジェクトとしてアップロードします。
# -*- coding: utf-8 -*-
import oss2
import requests
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# The requests.get method returns an iterable object. OSS SDK for Python uploads the object by using chunked encoding.
# Specify the address of the network stream.
input = requests.get('http://www.aliyun.com')
# Specify the full path of the object. Do not include the bucket name in the full path.
bucket.put_object('exampleobject.txt', input)
ローカルファイルのアップロード
次のコードは、examplefile.txtという名前のローカルファイルをexamplebucketという名前のバケットにアップロードする方法の例を示しています。 アップロードされたファイルは、OSSにexampleobject.txtという名前のオブジェクトとして保存されます。 OSSはローカルファイルをファイルオブジェクトとしてアップロードします。 アップロード中、OSSはrbモードなどのバイナリモードでファイルを開きます。
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# The file must be opened in binary mode.
# Specify the full path of the local file. By default, if you do not specify the full path of the local file, the local file is uploaded from the path of the project to which the sample program belongs.
with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
# Use the seek method to read data from byte 1,000 of the file. The data is uploaded from byte 1000 to the last byte of the local file.
fileobj.seek(1000, os.SEEK_SET)
# Use the tell method to obtain the current position.
current = fileobj.tell()
# Specify the full path of the object. Do not include the bucket name in the full path.
bucket.put_object('exampleobject.txt', fileobj)
OSS SDK for Pythonは、ローカルファイルをアップロードするためのより便利な方法も提供します。 次のコードは、このメソッドを使用してローカルファイルをアップロードする方法の例を示しています。
# Specify the full path of the object and the full path of the local file. Do not include the bucket name in the full path of the object.
# If the path of the local file is not specified, the file is uploaded to the path of the project to which the sample program belongs.
bucket.put_object_from_file('exampleobject.txt', 'D:\\localpath\\examplefile.txt')
よくある質問
オブジェクトのアップロード後にオブジェクトURLを取得するにはどうすればよいですか。
OSS SDKを使用してオブジェクトをアップロードする場合、オブジェクトのURLは応答に含まれません。 オブジェクトURLの取得方法の詳細については、「オブジェクトとオブジェクトURLの共有」をご参照ください。
アップロードされたオブジェクトのサイズがローカルファイルのサイズと同じかどうかを確認するにはどうすればよいですか?
オブジェクトをアップロードまたはダウンロードすると、データの整合性を確保するためにCRCがデフォルトで有効になります。 アップロードされたオブジェクトのサイズがローカルファイルのサイズと異なる場合、エラーInconsistentErrorが返されます。