2011-02-08 4 views
4

мне нужно от помощи относительно амазонки s3 с папками,Amazon s3 папки Проблема

Проблема я получаю с Amazon s3 класса, неумышленный является оно не папки поддержки, это только покажет вам полное имя файла, которое дает вам эти три варианта выходят из массива.

[Music/] => Array 
     (
      [name] => Music/ 
      [time] => 1296576896 
      [size] => 0 
      [hash] => d41d8cd98f00b204e9800998ecf8427e 
     ) 


[Music/Cocaine VIP_Shufunk_192.mp3] => Array 
     (
      [name] => Music/dnb/Cocaine VIP_Shufunk_192.mp3 
      [time] => 1296577893 
      [size] => 8300933 
      [hash] => edfb1bcfad7edfaccd901b95541e8d45 
     ) 

[Music/dnb/Crazy Talk_Tantrum Desire_192.mp3] => Array 
     (
      [name] => Music/dnb/Crazy Talk_Tantrum Desire_192.mp3 
      [time] => 1296577988 
      [size] => 9266562 
      [hash] => 0eb4ca6b53d78e1f976df9b488e0f4bf 
     ) 

[Music/dnb/Day_N_Nite_(TC_Remix)_Kid_Cudi_vs._Crookers_192.mp3] => Array 
     (
      [name] => Music/dnb/Day_N_Nite_(TC_Remix)_Kid_Cudi_vs._Crookers_192.mp3 
      [time] => 1296578094 
      [size] => 6597705 
      [hash] => 376ed9479afc9657b40bc4fc3e885b65 
     ) 

так, как вы можете видеть, что это дает вам время размер варианты имен и не хэш нет папки опций, так что я пытаюсь найти работу вокруг.

сверху, как вы можете видеть, Cocaine VIP_Shufunk_192.mp3 находится в папке «Музыка», а также в папке «Музыка/dnb /», которая содержит много файлов.

Что я хочу сделать, это найти то, что просто показать файлы, находящиеся в определенной папке.

до сих пор ive пытался.

нормально, так что если у меня есть папка с названием Музыка

я могу иметь следующее.

$amazon_folder = "Music"; 

$contents = $s3->getBucket("MY-BUCKET",$amazon_folder); 

foreach ($contents as $file){ 

$fname = $file['name']; 

// So i need some code 


} 

ok, так что это покажет все мои файлы в музыке, но проблема с этим - это показать все, включая папки в музыкальной папке.

Я не хочу, чтобы он показывал файлы, находящиеся в папке в папке с музыкой, говорят, что Music/Dnb мне не нужно показывать эти файлы только в папке Music, а не в папке Music/dnb ???

Я пробовал следующее.

$test = substr($fname, 0, strpos($fname, '/')); 

$more = explode("/", $fname); 

Может ли кто-нибудь придумать решение? ???

Благодаря

ответ

1

Там нет никакого способа вокруг, что в API Amazon. Вам необходимо указать filter your amazon request, используя prefix, как вы, а затем отфильтровываете «подпапки» на клиенте.

Лучшее решение на самом деле - не пытаться перемещаться по вашему хранилищу S3. Вместо этого вы должны поддерживать «индекс» ваших файлов в соответствующей базе данных (MySql, SimpleDb и т. Д.), Которую вы ищете и запрашиваете, а затем просто извлекаете файл из S3 по мере необходимости.

8

Amazon S3 - это плоская файловая система. Папок не существует. В них просто очень длинные имена файлов с косой чертой. Большинство инструментов S3 визуально отображают их как папки, но это не так, как S3 работает под капотом.

Раньше я никогда не использовал класс Undesigned Amazon S3, поэтому я не уверен в специфике этой библиотеки. Я использовал класс S3 CloudFusion в течение длительного времени, пока Amazon не разветвил его, чтобы создать официальный PHP SDK (который я использую сейчас).

В PHP SDK, вы можете сделать:

$s3 = new AmazonS3(); 

$response = $s3->list_objects($bucket, array(
    'prefix' => 'Music/dnb/' 
)); 

print_r($response->body); 

Это перечислит все объекты в S3 ведра, которые имеют имя файла (нет реальных папок, помните?), Который начинается с Music/dnb/.

2
$contents = $s3->getBucket("MY-BUCKET", $amazon_folder, null, null, "/"); 
0

Итак, вот работа. Чтобы перечислить свои каталоги, вы делаете это.


    `val objRequest = new ListObjectsRequest() 
     .withBucketName("MY-BUCKET") 
     .withPrefix("Music/").withDelimiter("/") 
    val result  = s3Client.listObjects(objRequest) 
    result.getCommonPrefixes()` 

Здесь перечислены все папки MYBUCKET/Music.

Это далеко от вас, где вы можете найти плоский файловый магазин. (Это написано в Скале)

0

Я не знаю, если этот ответ будет полезно после столь долгого времени, но здесь мы идем:

Чтобы решить эту проблему, вы должны сделать это в Java:

  List<S3ObjectSummary> files = s3client.listObjects(bucket.getName()).getObjectSummaries(); 
      for (S3ObjectSummary file : files) { 
       if (file.getKey().endsWith("/")) 
        System.out.println("----" + file.getKey() + " (ES CARPETA)"); 
       else 
        System.out.println("----" + file.getKey() + " NO NO NO"); 
      } 

С помощью метода «endsWith ("/") вы можете определить, является ли S3ObjectSummary папкой или нет.

Надеюсь, это может кому-то помочь.

Mike

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