Upload a single file to OSS by using the simple upload method in the Python SDK V2.
Usage notes
The sample code in this topic uses the China (Hangzhou) region ID cn-hangzhou and a public endpoint. To access OSS from other Alibaba Cloud services in the same region, use an internal endpoint. For mappings between regions and endpoints, see OSS regions and endpoints.
Permissions
By default, an Alibaba Cloud account has full permissions. RAM users or RAM roles under an Alibaba Cloud account do not have any permissions by default. The Alibaba Cloud account or account administrator must grant operation permissions through RAM policies or Bucket Policy.
|
API |
Action |
Description |
|
PutObject |
|
Uploads an object. |
|
|
Required if you specify object tags by using the |
|
|
|
Required if the |
|
|
|
Method definition
put_object(request: PutObjectRequest, **kwargs) → PutObjectResult
Request parameters
|
Parameter |
Type |
Description |
|
request |
PutObjectRequest |
The request parameters, including the ACL of the object, whether to forbid overwriting (ForbidOverwrite), and custom metadata (Metadata). PutObjectRequest |
Return values
|
Type |
Description |
|
PutObjectResult |
The return value. PutObjectResult |
For the complete method definition, see put_object.
Upload a local file
If an object with the same name already exists in the bucket and you have the required permissions, the new object overwrites the existing one.
Common parameters:
|
Parameter |
Description |
|
bucket_name |
The name of the bucket. Bucket naming conventions:
|
|
object_name |
The full path of the object, excluding the bucket name. Object naming conventions:
|
Use put_object_from_file to upload a local file to the destination bucket.
import argparse
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser.
parser = argparse.ArgumentParser(description="put object from file sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# Add the --key command-line argument, which specifies the name of the object. This argument is required.
parser.add_argument('--key', help='The name of the object.', required=True)
# Add the --file_path command-line argument, which specifies the path of the local file to upload. This argument is required.
parser.add_argument('--file_path', help='The path of Upload file.', required=True)
def main():
# Parse the command-line arguments.
args = parser.parse_args()
# Load credentials from environment variables for identity verification.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the software development kit (SDK) and set the credentials provider.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Set the region in the configuration.
cfg.region = args.region
# If the endpoint argument is provided, set the endpoint in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Create an OSS client using the specified configurations.
client = oss.Client(cfg)
# Execute the request to upload the object directly from a file.
# Specify the bucket name, object name, and local file path.
result = client.put_object_from_file(
oss.PutObjectRequest(
bucket=args.bucket, # The name of the bucket.
key=args.key # The name of the object.
),
args.file_path # The path of the local file.
)
# Print the result information of the request, including the status code, request ID, Content-MD5, ETag, 64-bit cyclic redundancy check (CRC64) hash, version ID, and server response time.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' content md5: {result.content_md5},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' version id: {result.version_id},'
f' server time: {result.headers.get("x-oss-server-time")},'
)
# The script entry point. The main function is called when the file is run directly.
if __name__ == "__main__":
main()
When using put_object to upload a local file, open the file in 'rb' mode. This ensures the original byte stream is uploaded instead of text content, preventing CRC failures.
import argparse
import alibabacloud_oss_v2 as oss
# Create a command-line argument parser.
parser = argparse.ArgumentParser(description="put object from file sample")
# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# Add the --key command-line argument, which specifies the name of the object. This argument is required.
parser.add_argument('--key', help='The name of the object.', required=True)
def main():
# Parse the command-line arguments.
args = parser.parse_args()
# Load credentials from environment variables for identity verification.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Load the default configurations of the SDK and set the credentials provider.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Set the region in the configuration.
cfg.region = args.region
# If the endpoint argument is provided, set the endpoint in the configuration.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Create an OSS client using the specified configurations.
client = oss.Client(cfg)
# Execute the request to upload the object directly from a local file.
# Specify the bucket name, object name, and local file path.
with open('your-test-file.md', 'rb') as f:
result = client.put_object(
oss.PutObjectRequest(
bucket=args.bucket, # The name of the bucket.
key=args.key, # The name of the object.
body=f.read() # Read the file content.
)
)
# Print the result information of the request, including the status code, request ID, Content-MD5, ETag, CRC64 hash, version ID, and server response time.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' content md5: {result.content_md5},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' version id: {result.version_id},'
f' server time: {result.headers.get("x-oss-server-time")},'
)
# The script entry point. The main function is called when the file is run directly.
if __name__ == "__main__":
main()
Examples
References
-
For the complete sample code, see put_object.py.