2011-12-18 73 views
5

我上傳了4個對象到S3。對象鍵如下:爲什麼ListObjects將前綴作爲數組中的單獨對象返回?

4eec12eb0a588620cccad16f/MumDad70s.jpg 
4eec12eb0a588620cccad16f/NathanI-1.jpg 
4eec12eb0a588620cccad16f/ProfilePic.png 
4eec12eb0a588620cccad16f/nathan-orange.jpg 

我的代碼,以請求的對象是:

var req = new ListObjectsRequest() 
    .WithBucketName(BucketName) 
    .WithPrefix(jobid + "/") 
    .WithDelimiter("/"); 
var objs = _s3Client.ListObjects(req); 

在響應,即使前綴實際上不是它自己的目標,而是隻是一個字符串前綴到實際對象的關鍵,我得到以下對象返回:

4eec12eb0a588620cccad16f/ 
4eec12eb0a588620cccad16f/MumDad70s.jpg 
4eec12eb0a588620cccad16f/NathanI-1.jpg 
4eec12eb0a588620cccad16f/ProfilePic.png 
4eec12eb0a588620cccad16f/nathan-orange.jpg 

爲什麼前綴被返回,就好像它是一個唯一的對象?我如何只是返回具有指定前綴的文件,而不必後過濾列表以擺脫前綴對象?

+0

不是答案,而是解決方案 - 只需檢查ListObjects上的getSize()是否大於0即可檢測這些對象。我很想知道這個問題的真正答案,但... – 2012-03-02 03:41:30

+0

仍在尋找一個很好的解決此問題的方法。 – Adi 2017-02-27 14:17:51

回答

2

按這裏(是的,我知道你很可能不會要求Java文檔):http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#listObjects%28com.amazonaws.services.s3.model.ListObjectsRequest%29

它指出:

如果調用listObjects與「富的前綴值/ 「和在該桶上的值」/「的分隔符 (」foo/bar /「)返回包含一個鍵(」foo/boo「)和一個條目的對象列表 。要深入瞭解虛擬層次結構,請對listObjects調用另一個 將prefix參數設置爲任何感興趣的 通用前綴,以列出該前綴下的各個鍵。

強調我的。看起來這實際上是預期的功能 - 將所有密鑰共同返回前綴。

+0

啊,很好找。我想訣竅是忽略以/ – 2012-03-08 13:38:48

+0

結尾的條目它看起來像基於文檔,只有在設置了分隔符時纔會發生 - 是否正確? – 2012-03-08 15:14:58

+0

@AndreiKrotkov我也是這麼理解的。 – AASoft 2012-03-08 18:05:49

相關問題