【问题标题】:how to upload the file under different region of AWS-s3 bucket using python如何使用python在AWS-s3存储桶的不同区域上传文件
【发布时间】:2018-04-09 12:40:20
【问题描述】:
import boto
import boto.s3
import sys
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
bucket_name="s3 bucket_name"
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)

bucket=conn.get_bucket(bucket_name,validate=True,headers=None)s

testfile = "file_path"
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 = 'mytestfile.csv'
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)
  • 这是我用来在 s3 存储桶中上传 .csv 文件的程序,如果我选择的区域是 美国东部(弗吉尼亚北部),它会以预期的方式工作 但我需要在 'US East (Ohio)' 区域下上传文件。如果我尝试这样做,我会遇到以下异常 boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request。如果有人对此有解决方案,请与我分享。

【问题讨论】:

  • 你需要使用boto.s3.connect_to_region方法。可以在这个 SO 问题中找到详细信息:stackoverflow.com/questions/22454559/…
  • 我试过了,但它对我不起作用。如果有任何参考。与我分享。
  • 你能分享你试过的代码和你收到的错误吗?
  • 我点击了您与我分享的链接,它以预期的方式工作。代码在这里非常感谢

标签: python-3.x amazon-web-services amazon-s3 iot


【解决方案1】:
import boto
import sys
from boto.s3.key import Key
import boto.s3.connection

AWS_ACCESS_KEY_ID = '<access_key>'
AWS_SECRET_ACCESS_KEY = '<secert_key>'
Bucketname = 'bucket_name' 


conn = boto.s3.connect_to_region('us-east-2',
       aws_access_key_id=AWS_ACCESS_KEY_ID,
       aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
       is_secure=True,               # uncomment if you are not using ssl
       calling_format = boto.s3.connection.OrdinaryCallingFormat(),
       )
bucket = conn.get_bucket(Bucketname)

testfile = "filename"
print ('Uploading %s to Amazon S3 bucket %s' % 
   (testfile, Bucketname))

def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()


k = Key(bucket)
k.key = 'fileName
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)

【讨论】:

    【解决方案2】:

    它对我有用,无需指定区域:

    import boto3
    client = boto3.client('s3')
    client.upload_file('foo.txt', 'my-bucket', 'foo.txt')
    

    不过,你也可以在连接 S3 时指定区域:

    import boto3
    client = boto3.client('s3', region_name = 'ap-southeast-2')
    client.upload_file('foo.txt', 'my-bucket', 'foo.txt')
    

    顺便说一句,您应该从不需要将凭据放入源 (.py) 文件中。相反,将凭据存储在配置文件中。 SDK 将自动检索它们。创建文件的最简单方法是使用 AWS Command-Line Interface (CLI) aws configure command

    然后,您可以像我上面那样运行代码,而不必担心传递凭据。

    【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2018-04-25
    • 2015-07-23
    • 2018-08-05
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多