Ví dụ này cho thấy cách tải xuống một tệp từ xô S3, sử dụng s3.bucket.doad_file [].S3.Bucket.download_file[].
Điều kiện tiên quyết
Để thiết lập và chạy ví dụ này, trước tiên bạn phải:
- Định cấu hình thông tin đăng nhập AWS của bạn, như được mô tả trong QuickStart.
- Tạo một thùng S3 và tải một tệp lên thùng.
- Thay thế các giá trị khóa và các giá trị khóa trong đoạn mã bằng tên của nhóm của bạn và khóa cho tệp đã tải lên.BUCKET_NAME and KEY values in the code snippet with the name of your bucket and the key for the uploaded file.
Tải xuống một tập tin
Ví dụ dưới đây cố gắng tải xuống một đối tượng S3 vào một tệp. Nếu dịch vụ trả về lỗi 404, nó sẽ in một thông báo lỗi cho biết rằng đối tượng không tồn tại.
import boto3 import botocore BUCKET_NAME = 'my-bucket' # replace with your bucket name KEY = 'my_image_in_s3.jpg' # replace with your object key s3 = boto3.resource['s3'] try: s3.Bucket[BUCKET_NAME].download_file[KEY, 'my_local_image.jpg'] except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == "404": print["The object does not exist."] else: raise
Các phương thức được cung cấp bởi AWS SDK cho Python để tải xuống các tệp tương tự như các phương thức được cung cấp để tải lên các tệp.
Phương thức download_file
chấp nhận tên của xô và đối tượng để tải xuống và tên tệp để lưu tệp vào.
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']
Phương thức download_fileobj
chấp nhận một đối tượng giống như tệp có thể ghi. Đối tượng tệp phải được mở ở chế độ nhị phân, không phải chế độ văn bản.
s3 = boto3.client['s3'] with open['FILE_NAME', 'wb'] as f: s3.download_fileobj['BUCKET_NAME', 'OBJECT_NAME', f]
Giống như anh em họ tải lên của họ, các phương thức tải xuống được cung cấp bởi các lớp S3 Client
,
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']0 và
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']1 và mỗi lớp cung cấp chức năng giống hệt nhau. Sử dụng bất kỳ lớp nào là thuận tiện.
Cũng giống như các phương thức tải lên, các phương thức tải xuống hỗ trợ các tham số
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']2 và
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']3 tùy chọn.
Danh sách các cài đặt
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']2 hợp lệ cho các phương thức tải xuống được chỉ định trong thuộc tính
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']5 của đối tượng
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']6 tại
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']7.
Tham số
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']3 của phương thức tải xuống được sử dụng cho cùng mục đích với phương thức tải lên. Các phương thức tải lên và tải xuống đều có thể gọi cùng một lớp
import boto3 s3 = boto3.client['s3'] s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']3.
Từ một ví dụ trong tài liệu chính thức, định dạng chính xác là:
import boto3
s3 = boto3.client['s3', aws_access_key_id=... , aws_secret_access_key=...]
s3.download_file['BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME']
Bạn cũng có thể sử dụng một đối tượng giống như tệp được mở ở chế độ nhị phân.
s3 = boto3.client['s3', aws_access_key_id=... , aws_secret_access_key=...]
with open['FILE_NAME', 'wb'] as f:
s3.download_fileobj['BUCKET_NAME', 'OBJECT_NAME', f]
f.seek[0]
Mã trong câu hỏi sử dụng
s3 = boto3.client['s3'] with open['FILE_NAME', 'wb'] as f: s3.download_fileobj['BUCKET_NAME', 'OBJECT_NAME', f]0, không cung cấp bất kỳ thông tin đăng nhập nào.
Định dạng để xác thực một máy khách được hiển thị ở đây:
import boto3
client = boto3.client[
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
]
# Or via the Session
session = boto3.Session[
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
]
Và cuối cùng, bạn cũng có thể sử dụng lại phiên được xác thực mà bạn đã tạo để lấy xô, sau đó tải xuống sau đó tệp từ thùng.
from boto3.session import Session
import boto3
ACCESS_KEY = 'ABC'
SECRET_KEY = 'XYZ'
session = Session[aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY]
# session is authenticated and can access the resource in question
session.resource['s3']
.Bucket['bucket_name']
.download_file['k.png','/Users/username/Desktop/k.png']