シンプルアップロードでは、put_object メソッドを使用して単一のファイル (オブジェクト) をアップロードします。シンプルアップロードには、文字列、バイト、Unicode 文字、ネットワークストリーム、ローカルファイルのアップロードが含まれます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
同じ名前のファイルがバケットにすでに存在し、必要なアクセス権限がある場合、新しくアップロードされたファイルは既存のファイルを上書きします。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
共通パラメーター
次の表に、ファイルのアップロードに使用される共通パラメーターを示します。
パラメーター | 説明 |
bucket_name | バケット名。 バケット名は、次のルールに従う必要があります。
|
object_name | オブジェクトの完全なパス。完全なパスにバケット名を含めることはできません。 オブジェクト名は、次のルールに従う必要があります。
|
文字列のアップロード
次のコードは、文字列を examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# ファイルをアップロードします。
# ファイルのアップロード時にストレージクラス (x-oss-storage-class) とアクセス権限 (x-oss-object-acl) を設定するには、put_object で関連するヘッダーを設定します。
# headers = dict()
# headers["x-oss-storage-class"] = "Standard"
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
# オブジェクトの完全なパスと文字列を指定します。完全なパスにバケット名を含めることはできません。
# result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers=headers)
result = bucket.put_object('exampleobject.txt', 'Hello OSS')
# HTTP ステータスコード。
print('http status: {0}'.format(result.status))
# リクエスト ID。このリクエストを一意に識別します。トラブルシューティングを容易にするために、このパラメーターをプログラムのログに追加します。
print('request_id: {0}'.format(result.request_id))
# ETag は put_object メソッドの戻り値に固有のプロパティです。オブジェクトのコンテンツを識別します。
print('ETag: {0}'.format(result.etag))
# HTTP レスポンスヘッダー。
print('date: {0}'.format(result.headers['date']))バイトのアップロード
次のコードは、バイトを examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスとバイトコンテンツを指定します。完全なパスにバケット名を含めることはできません。
bucket.put_object('exampleobject.txt', b'Hello OSS')Unicode 文字のアップロード
次のコードは、Unicode 文字を examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法の例を示しています。Unicode 文字をアップロードすると、OSS はアップロード前に自動的に UTF-8 エンコードされたバイトに変換します。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスと Unicode 文字を指定します。完全なパスにバケット名を含めることはできません。
bucket.put_object('exampleobject.txt', u'Hello OSS')ネットワークストリームのアップロード
次のコードは、ネットワークストリームを examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法の例を示しています。OSS はネットワークストリームを反復可能オブジェクトとして扱い、チャンクエンコーディングを使用してアップロードします。
# -*- coding: utf-8 -*-
import oss2
import requests
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# requests.get は反復可能オブジェクトを返します。Python SDK はその後、チャンクエンコーディングを使用してオブジェクトをアップロードします。
# ネットワークストリームの URL を指定します。
input = requests.get('http://www.aliyun.com')
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。
bucket.put_object('exampleobject.txt', input)ローカルファイルのアップロード
次のコードは、ローカルファイル examplefile.txt を examplebucket バケットにアップロードし、exampleobject.txt として保存する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (例: examplebucket) を指定します。
bucketName = "examplebucket"
# バケットインスタンスを作成し、バケット名とリージョン情報を指定します。
bucket = oss2.Bucket(auth, endpoint, bucketName, region=region)
# ローカルファイルの完全なパス。
local_file_path = 'D:\\localpath\\examplefile.txt'
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例: exampleobject.txt。
objectName = 'exampleobject.txt'
# put_object_from_file メソッドを使用してローカルファイルを OSS にアップロードします。
bucket.put_object_from_file(objectName, local_file_path)特定のバイト位置からローカルファイルのアップロードを開始したい場合は、seek() メソッドを使用してターゲット位置にジャンプできます。次のコードは、1000 バイト目からアップロードを開始する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケット名 (例: examplebucket) に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# ファイルをバイナリモードで開きます。
# ローカルファイルの完全なパスを指定します。ローカルパスを指定しない場合、ファイルはサンプルプログラムを含むプロジェクトのローカルパスからアップロードされます。
with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
# seek() メソッドは、1000 バイト目から読み書きを開始するように指定します。アップロードは指定された 1000 バイト目から開始され、ファイルの末尾まで続行されます。
fileobj.seek(1000, os.SEEK_SET)
# tell() メソッドは現在の位置を返します。
current = fileobj.tell()
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。
bucket.put_object('exampleobject.txt', fileobj)よくある質問
アップロード後にファイル URL を取得する方法
ソフトウェア開発キット (SDK) を使用してファイルをアップロードした後、結果にファイル URL は返されません。ファイル URL の取得方法の詳細については、「署名付き URL を使用したファイルのダウンロードまたはプレビュー」をご参照ください。
アップロードされたファイルサイズがローカルファイルサイズと同じであるかを確認する方法
デフォルトでは、OSS はファイルのアップロードおよびダウンロード中にデータ整合性を確保するために、巡回冗長検査 (CRC) によるデータ検証を有効にします。アップロードされたファイルサイズがローカルファイルサイズと異なる場合、InconsistentError が報告されます。
ただし、CRC データ検証プロセスには同時伝送と計算が含まれるため、アップロード速度が低下する可能性があります。ビジネスシナリオで高速伝送が優先される場合は、次のコードを使用して CRC 検証を無効にできます。
# -*- coding: utf-8 -*- import oss2 import os from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは v4 署名に必要です。 region = "cn-hangzhou" # yourBucketName をバケット名に設定し、enable_crc=False を設定して CRC データ検証を無効にします。 bucket = oss2.Bucket(auth, endpoint, "yourBucketName", enable_crc=False, region=region)