2016-10-31 20 views
23

Trong boto 2, bạn có thể viết thư cho một đối tượng S3 sử dụng các phương pháp:Làm thế nào để viết một tập tin hoặc dữ liệu đến một đối tượng S3 sử dụng boto3

Có tương đương boto 3 không? Phương pháp boto3 để lưu dữ liệu vào một đối tượng được lưu trữ trên S3 là gì?

Trả lời

42

Trong boto 3, phương pháp của Key.set_contents_from_ 'được thay thế bằng

Ví dụ:

import boto3 

some_binary_data = b'Here we have some data' 
more_binary_data = b'Here we have some more data' 

# Method 1: Object.put() 
s3 = boto3.resource('s3') 
object = s3.Object('my_bucket_name', 'my/key/including/filename.txt') 
object.put(Body=some_binary_data) 

# Method 2: Client.put_object() 
client = boto3.client('s3') 
client.put_object(Body=more_binary_data, Bucket='my_bucket_name', Key='my/key/including/anotherfilename.txt') 
.210

Ngoài ra, dữ liệu nhị phân có thể đến từ việc đọc một tập tin, như mô tả trong the official docs comparing boto 2 and boto 3:

Storing Data

Storing data from a file, stream, or string is easy:

# Boto 2.x 
from boto.s3.key import Key 
key = Key('hello.txt') 
key.set_contents_from_file('/tmp/hello.txt') 

# Boto 3 
s3.Object('mybucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb')) 
+0

botocore. ngoại lệ.NoCredentialsError: Không thể xác định thông tin đăng nhập cách khắc phục sự cố này? –

+0

@deepakmurthy Tôi không chắc chắn lý do tại sao bạn nhận được lỗi đó ... Bạn cần phải [hỏi một câu hỏi Stack Overflow mới] (https://stackoverflow.com/questions/ask) và cung cấp thêm chi tiết về vấn đề. – jkdev

+0

Khi tôi thử 's3.Object(). Put()' Tôi kết thúc với một đối tượng có độ dài nội dung là 0. Đối với tôi 'put()' chỉ chấp nhận dữ liệu chuỗi, nhưng 'put (str (binarydata))' dường như có một số vấn đề mã hóa. Tôi kết thúc với một đối tượng khoảng 3 lần kích thước của dữ liệu gốc, mà làm cho nó vô dụng đối với tôi. – user1129682

Các vấn đề liên quan