如何使用boto将文件上传到S3桶的目录中
我想用Python把一个文件复制到S3的存储桶里。
比如说,我有一个存储桶,名字叫“test”。在这个存储桶里,有两个文件夹,一个叫“dump”,另一个叫“input”。现在我想把一个文件从我的电脑复制到S3的“dump”文件夹里,谁能帮帮我呢?
17 个回答
57
在一个会话中,使用凭证将文件上传到S3。
import boto3
session = boto3.Session(
aws_access_key_id='AWS_ACCESS_KEY_ID',
aws_secret_access_key='AWS_SECRET_ACCESS_KEY',
)
s3 = session.resource('s3')
# Filename - File to upload
# Bucket - Bucket to upload to (the top level directory under AWS S3)
# Key - S3 object name (can contain subdirectories). If not specified then file_name is used
s3.meta.client.upload_file(Filename='input_file_path', Bucket='bucket_name', Key='s3_output_key')
141
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念或者使用了不合适的方法。为了找到解决方案,我们可以在网上查找相关的讨论和建议,比如在StackOverflow这样的论坛上。
在这些讨论中,其他程序员会分享他们的经验和解决方案,帮助我们更好地理解问题的根源。有时候,问题的解决方法可能很简单,只需要调整一下代码或者更改一些设置。
总之,遇到问题时,不要气馁,积极寻求帮助和学习,慢慢你就会变得更加熟练。
import boto3
s3 = boto3.resource('s3')
BUCKET = "test"
s3.Bucket(BUCKET).upload_file("your/local/file", "dump/file")
130
注意:这个回答使用了 boto
。可以查看 另一个回答,它使用的是 boto3
,这是一个更新版。
试试这个...
import boto
import boto.s3
import sys
from boto.s3.key import Key
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
bucket_name = AWS_ACCESS_KEY_ID.lower() + '-dump'
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY)
bucket = conn.create_bucket(bucket_name,
location=boto.s3.connection.Location.DEFAULT)
testfile = "replace this with an actual filename"
print 'Uploading %s to Amazon S3 bucket %s' % \
(testfile, bucket_name)
def percent_cb(complete, total):
sys.stdout.write('.')
sys.stdout.flush()
k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile,
cb=percent_cb, num_cb=10)
[更新] 我不是专业的Python程序员,所以感谢你提醒我关于导入语句的事。另外,我不建议把凭证放在自己的源代码里。如果你是在AWS上运行这个,建议使用带有实例配置文件的IAM凭证(http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。为了在你的开发/测试环境中保持相同的行为,可以使用AdRoll的Hologram工具(https://github.com/AdRoll/hologram)。