2013-08-22 2 views
1

Я замечаю, различающиеся результаты при отображении содержимого папки в одном ведре, в частности, иногда домой папка будет отображаться в соответствии с разделом «Содержание» (в пределах ключевого элемента) , но в других случаях нет. Смотрите следующие два выхода:Несогласованность в запросе GET BUCKET

Этот вывод не включает в себя приставкой каталог

<?xml version='1.0' encoding='UTF-8'?> 
<ListBucketResult xmlns='http://doc.s3.amazonaws.com/2006-03-01'> 
<Name> 
test22</Name>       <=== Bucket 
<Prefix> 
16-Jul-2013</Prefix>      <=== Prefixed folder 
<Marker> 
</Marker> 
<IsTruncated> 
false</IsTruncated> 
<Contents> 
<Key> 
16-Jul-2013/0371.txt</Key>    <=== ONLY OBJECTS LISTED 
<Generation> 
1374016944689000</Generation> 
<MetaGeneration> 
1</MetaGeneration> 
<LastModified> 
2013-07-16T23:22:24.664Z</LastModified> 
<ETag> 
"5d858b3ddbf51fb5ec4501799e637b47"</ETag> 
<Size> 
96712</Size> 
<Owner> 
<ID> 
00b4903a97d860d9d5a7d98a1c6385dc6146049499b88ceae217eaee7a0b2ff4</ID> 
</Owner> 
</Contents> 

Но этот вывод делает

<?xml version='1.0' encoding='UTF-8'?> 
<ListBucketResult xmlns='http://doc.s3.amazonaws.com/2006-03-01'> 
<Name> 
test22</Name>       <=== Bucket 
<Prefix> 
22-Aug-2013</Prefix>      <=== Prefixed folder 
<Marker> 
</Marker> 
<IsTruncated> 
false</IsTruncated> 
<Contents> 
<Key> 
22-Aug-2013/</Key>      <=== FOLDER INCLUDED IN LIST 
<Generation> 
1377178774399000</Generation> 
<MetaGeneration> 
1</MetaGeneration> 
<LastModified> 
2013-08-22T13:39:34.337Z</LastModified> 
<ETag> 
"d41d8cd98f00b204e9800998ecf8427e"</ETag> 
<Size> 
0</Size> 
<Owner> 
<ID> 
00b4903a97d0b7e1f638009476bba4c5d964f744e50c23c3681357a290cb7b16</ID> 
</Owner> 
</Contents> 

Обе просьбы были сделаны с помощью следующего кода (примечание Я не использовал аутентифицированный сеанс, элементы читаются на листе):

uri = URI('https://storage.googleapis.com/test22?prefix=16-Jul-2013')  <=== prefix changed for each case 
req3 = Net::HTTP::Get.new(uri.request_uri) 

#req3['Authorization'] = "#{token['token_type']} #{token['access_token']}" 
req3['Content-Length'] = 0 
req3['content-Type'] = 'text/plain - GB' 
req3['Date'] = Time.now.strftime("%a, %d %b %Y %H:%M:%S %Z") 
req3['Host'] = 'storage.googleapis.com' 
req3['x-goog-api-version'] = 2 
req3['x-goog-project-id'] = ############### 

Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') { |http| 
    resp3 = http.request(req3) 
    puts resp3.body.gsub(/>/, ">\n") 
} 

Почему разница? Есть что-то основное, что мне не хватает? Спасибо заранее ...

-Ли

+0

Можете ли вы показать нам API-запросы, которые вы использовали в обоих случаях? (Пожалуйста, разделите заголовок Authorization:) –

+0

Возможно ли, что у вас есть объект в вашем ковше под названием «22-Aug-2013 /», с косой чертой? –

+0

API-запрос прилагается. Что касается того, что объект имеет имя, аналогичное каталогу no, я это проверял. Это не единственные две каталоги, которые ведут себя таким образом, есть еще один, который также показывает homedir, хотя тот пуст, но тот, что в выводе примера выше, не был. – Lee

ответ

2

При создании папки с помощью Виртуальной консоли, он создает объект-заполнитель с именем папки + «/», чтобы представить пустую папку. Даже если вы позже добавите объекты в папку, местозаполнитель останется.

С другой стороны, если вы непосредственно загружаете объект с именем «/» в имени с помощью API (например, выгружаете его в папку/object.txt), объект-заполнитель не создается, поскольку наличие объекта достаточно, чтобы вывести существование папки. Если вы удалите «folder/object.txt», папка больше не будет указана в корневом списке Cloud Console, так как нет объекта-заполнителя.

Чтобы ответить на ваш вопрос явно, это означает, что '16 -Jul-2013/0371.txt 'был создан с помощью прямой загрузки в '16 -Jul-2013/0371.txt'. Напротив, '22 -Aug-2013/'был создан кнопкой «Новая папка» в Cloud Console. В последнем случае создается объект-заполнитель, в первом - нет.

Все это связано с тем, что пространство имен GCS является плоским, а не иерархическим. Абстракция папки позволяет вам визуализировать вещи иерархически, но имеет некоторые ограничения.

+0

Самое прекрасное объяснение, это также объясняет, почему «несоответствия» я видел. Благодаря!!! – Lee

Смежные вопросы