2016-04-26 142 views
0

因此,我想獲取我的S3存儲桶中所有對象的列表。我只是把它放在一個快速設置的快速路線應用程序中(這並不重要,它只是表達我所熟悉的)。從S3存儲桶中獲取物品

所以我做:

var allObjs = []; 

s3.listObjects({Bucket: 'myBucket'}, function(err, data) { 

     var stringifiedObjs = JSON.stringify(allObjs); 


     fs.writeFile("test", stringifiedObjs, function(err) {}) 

} 

這抓住了我的對象,stringifys並將其寫入到一個名爲test的文件。我遇到的問題是它只能獲得1,000個結果。

我在某處閱讀(我無法找到)AWS將您限制爲每次調用1000個結果的位置。

我該如何重新運行並抓取下一個1000?但是確保下一個增量1,000不是第一個?

簡而言之,我如何獲得S3存儲桶中的每個對象?我一直迷失在文檔中。

謝謝!

編輯

這是我的目標,我回去:

{ Key: 'bucket_path/e11_19_9a31mv3ot51tm384grjd6rdj51boxx_q_q112.png', 
    LastModified: Sat Apr 23 2016 09:16:23 GMT+0100 (BST), 
    ETag: '"7d50fsdfsd4sda159b32cf85c683c5924"', 
    Size: 704222, 
    StorageClass: 'STANDARD', 
    Owner: 
    { DisplayName: 'servers', 
     ID: '58af203151c51eddf2sdfs411e0b91d274a8fda23f58280f9b06371e436f7' } }, 

回答

1

當您收到來自listObjects打電話給你的迴應,你的反應應該包括data財產2個非常重要的領域:

  • IsTruncated - 如果有多個鍵返回。否則爲假。
  • NextMarker - 下一次撥打listObjectsMarker屬性中使用的值。

所以你打電話listObjects後,您需要檢查IsTruncated場,看它是否是True。如果是,則將NextMarker的值填入Marker的值,並再次調用listObjects

更新:

這樣看來,AWS.Request對象有一個.eachPage方法可用於自動進行多次調用。所以有一個神奇的功能爲你做這項工作。

var pages = 1; 
s3.listObjects().eachPage(function(err, data) { 
    if (err) return; 
    console.log("Page", pages++); 
    console.log(data); 
}); 

來源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html

+0

'{IsTruncated:真, 標記: '', 內容:[{myObjects}], 名稱: 'myBucket', 前綴:'', MaxKeys:1000, CommonPrefixes:[]}' 這是我回來的迴應..沒有'NextMarker'我也從 – PourMeSomeCode

+0

打電話忽略我以前的評論歡呼男人!這工作!你提到的'.eachPage'實際上會自動爲你添加標記。甜心:D – PourMeSomeCode

3

您需要設置屬性作爲以前的最後一個元素得到

檢查的文件作爲參考(如你已經做的:))

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html

+0

乾杯!我看了一下,我的超級新,所以我有點失落。當我設置標記時,你的意思是,標記將是我從上次結果中獲得的最後一個對象嗎? – PourMeSomeCode

+0

這是一個關鍵,所以你應該把它設置爲最後一個對象的關鍵字(通常是文件名)。你可以看到單個對象的屬性列表並找到'key'屬性 – Pietro

+0

你可以在這裏看到一個響應的例子http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html#RESTBucketGET-響應 - 每個內容的例子都有這樣的關鍵' my-third-image.jpg' – Pietro

相關問題