我一键节能的桶:使用Amazon s3 boto库,如何获取保存的密钥的URL?
key = bucket.new_key(fileName)
key.set_contents_from_string(base64.b64decode(data))
key.set_metadata('Content-Type', 'image/jpeg')
key.set_acl('public-read')
保存成功后,我怎样才能访问新创建的文件的网址是什么?
我一键节能的桶:使用Amazon s3 boto库,如何获取保存的密钥的URL?
key = bucket.new_key(fileName)
key.set_contents_from_string(base64.b64decode(data))
key.set_metadata('Content-Type', 'image/jpeg')
key.set_acl('public-read')
保存成功后,我怎样才能访问新创建的文件的网址是什么?
如果关键是公开可读(如上图所示),可以使用Key.generate_url
:
url = key.generate_url(expires_in=0, query_auth=False)
如果是私有的,要生成一个过期的网址与他人共享谁没有内容您可以直接访问:
url = key.generate_url(expires_in=300)
其中expires
是URL到期前的秒数。这些将产生HTTPS网址。如果你喜欢一个HTTP URL,使用此:
url = key.generate_url(expires_in=0, query_auth=False, force_http=True)
import boto
from boto.s3.connection import S3Connection
conn = S3Connection('AWS_ACCESS_KEY', 'AWS_SECRET_KEY')
secure_https_url = 'https://{host}/{bucket}/{key}'.format(
host=conn.server_name(),
bucket='name-of-bucket',
key='name_of_key')
http_url = 'http://{bucket}.{host}/{key}'.format(
host=conn.server_name(),
bucket='name-of-bucket',
key='name_of_key')
这是我做到了在博托2.23.0为公共URL。我无法使expires_in = None参数正常工作。
请注意,对于HTTPS,您不能使用子域。
对于Boto3,你需要做的是通过以下方式...
import boto3
s3 = boto3.client('s3')
url = '{}/{}/{}'.format(s3.meta.endpoint_url, bucket, key)
这是完美的我的用例,谢谢! – Patrick 2016-11-30 04:43:42
对于boto3请参阅https://stackoverflow.com/questions/33549254/how-to-generate-url-from-boto3-in-amazon-web-services – 2017-06-09 19:18:18
随着博托2.9.6我必须使用'expires_in = 0'。 'expires_in = None'给了我一个错误。 – dirk 2013-06-26 21:09:20
值得注意的是'expires_in = 0'是“立即过期!”在博托2.3.0 – 2013-12-06 11:54:53
如果密钥是公开的(例如,你调用make_public()),expires_in = 0什么也不做 - > generate_url生成的url永远不会过期。在boto 2.2.2中,generate_url(expires_in = None)抛出一个错误,因为试图计算过期日期为“expires = int(time.time()+ expires_in)” – 2014-03-06 12:16:32