Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 boto-获取密钥的更简洁的方法';桶中的值是多少?_Amazon S3_Boto - Fatal编程技术网

Amazon s3 boto-获取密钥的更简洁的方法';桶中的值是多少?

Amazon s3 boto-获取密钥的更简洁的方法';桶中的值是多少?,amazon-s3,boto,Amazon S3,Boto,我试图找出一种通过boto从s3获取数据的简洁方法 我当前的代码如下所示。s3管理器只是一个为我的应用程序执行所有s3设置的类 log.debug("generating downloader") downloader = s3_manager() log.debug("accessing bucket") bucket_archive = downloader.s3_buckets['@archive'] log.debug("getting key

我试图找出一种通过boto从s3获取数据的简洁方法

我当前的代码如下所示。s3管理器只是一个为我的应用程序执行所有s3设置的类

    log.debug("generating downloader")
    downloader = s3_manager()

    log.debug("accessing bucket")
    bucket_archive = downloader.s3_buckets['@archive']

    log.debug("getting key")
    key = bucket_archive.get_key(archive_filename)

    log.debug("getting key into string")
    source = key.get_contents_as_string()
问题是,查看我的调试日志,我向amazon s3发出了两个请求:

    key = bucket_archive.get_key(archive_filename)
    source = key.get_contents_as_string()
查看文档[],似乎对
get_key
的调用会检查它是否存在,而第二个调用会获取实际数据。有人知道一种同时做这两件事的方法吗?对于我们的应用程序,最好使用一种更简洁的方法来执行此操作。

方法对对象执行HEAD请求,以验证该对象是否存在。如果您确定bucket和key存在,并且不希望有HEAD请求的开销,那么您可以直接创建一个key对象。类似这样的方法会奏效:

import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket', validate=False)
key = bucket.new_key('myexistingkey')
contents = key.get_contents_as_string()

调用
get_bucket
时的
validate=False
消除了一个get请求,该请求也用于验证bucket是否存在。

太好了。谢谢我从您的回复(并确认)中得到的相关信息是,我可以对现有项目调用
new\u key()+get\u contents\u as\u string()
,而不是
get\u key()+get\u contents\u as\u string()
。我从来没有想过对一个现有的项目调用
new
!好的,新方法实际上只是一个快捷方式,可以创建一个特定名称的Key对象,引用已经初始化的bucket对象。您也可以使用key(bucket,name)创建一个key。我只是很懒,不想导入密钥类(8^)