Я пытаюсь получить все файлы из подпапки a3 amazon S3 и сделать их загружаемыми на веб-странице.
У меня есть ведро, называемое образами. Внутри этого ведра у меня есть несколько других папок. Теперь я пытаюсь получить все файлы внутри этой подпапки и показать их на странице. S3 Ведра: / images / images / test1 / / images / test2 / / images / test1 / 1 / images / test1 / 2 / images / test1 / 1 / item
Я так пробовал, но не смог получить ожидаемый результат.
// Target files full path : images/test1/1/item $bucketName = 'images'; $source = '/test1/1/item' $image = $this->s3->getBucket($bucketName); foreach ($image as $key=>$data){ $k = $data['name']; print_r($k); // now this gives me full list of everything inside the images bucket. }
Теперь, если я хочу получить объекты из ведра, я могу использовать getObject, который я пробовал вот так:
$result = $this->s3->getObject($image); // I am confused about this one
Любые предложения будут оценены. Благодаря,
После использования следующего ответа от Josue Ibarra, я получил что-то вроде этого
( [tableuploads/1/emaillists/15.10.2013-18.03.23-emailList.csv] => Array ( [file_name] => 15.10.2013-18.03.23-emailList.csv [file_folder] => emaillists [file_size] => 64 [created_on] => 2013-10-15 19:03:26 [s3_link] => http://s3.amazonaws.com/webtools_sharing/emaillists/15.10.2013- 18.03.23-emailList.csv [md5_hash] => 4809ae0b75d3517b69f69b53ba0b2959 ) [tableuploads/1/emaillists/15.10.2013-18.04.32-emailList.csv] => Array ( [file_name] => 15.10.2013-18.04.32-emailList.csv [file_folder] => emaillists [file_size] => 64 [created_on] => 2013-10-15 19:04:45 [s3_link] => http://s3.amazonaws.com/webtools_sharing/emaillists/15.10.2013-18.04.32-emailList.csv [md5_hash] => 14094e133779619ddfcfc008d16ce75b ) [tableuploads/2/emaillists/15.10.2013-18.03.23-emailList.csv] => Array ( [file_name] => 15.10.2013-18.03.23-emailList.csv [file_folder] => emaillists [file_size] => 64 [created_on] => 2013-10-15 19:03:26 [s3_link] => http://s3.amazonaws.com/webtools_sharing/emaillists/15.10.2013-18.03.23-emailList.csv [md5_hash] => 4809ae0b75d3517b69f69b53ba0b2959 ) [tableuploads/2/emaillists/15.10.2013-18.04.32-emailList.csv] => Array ( [file_name] => 15.10.2013-18.04.32-emailList.csv [file_folder] => emaillists [file_size] => 64 [created_on] => 2013-10-15 19:04:45 [s3_link] => http://s3.amazonaws.com/webtools_sharing/emaillists/15.10.2013-18.04.32-emailList.csv [md5_hash] => 14094e133779619ddfcfc008d16ce75b ) )
Я хочу что-то вроде этого: http://s3.amazonaws.com/webtools_sharing/tableuploads/1/emaillists/15.10.2013-18.03.23- emailList.csv
http://s3.amazonaws.com/webtools_sharing/tableuploads/2/emaillists/15.10.2013-18.03.23-emailList.csv
Которая должна быть загружаемой ссылкой.
Пожалуйста, предложите мне ссылку или дать мне несколько идей, как я могу это сделать.
Я сделал эту функцию некоторое время назад
public function list_s3_bucket($bucket_name) { // initialize the data array $data; $bucket_content = $this->s3->getBucket($bucket_name); foreach ($bucket_content as $key => $value) { // ignore s3 "folders" if (preg_match("/\/$/", $key)) continue; // explode the path into an array $file_path = explode('/', $key); $file_name = end($file_path); $file_folder = substr($key, 0, (strlen($file_name) * -1)+1); $file_folder = prev($file_path); $s3_url = "https://s3.amazonaws.com/{$bucket_name}/{$key}"; $data[$key] = array( 'file_name' => $file_name, 's3_key' => $key, 'file_folder' => $file_folder, 'file_size' => $value['size'], 'created_on' => date('Ymd H:i:s', $value['time']), 's3_link' => $s3_url, 'md5_hash' => $value['hash']); } return $data; }
Он возвращает вам массив, ключ – полное имя файла, поэтому вы можете:
$list = $this->your_model->list_s3_bucket($bucket_name); foreach ($list as $key => $row){ force_download($this->s3->getObject($row['s3_key']), $row['file_name']); // you can use this url: print($row['s3_link']); } function force_download($data, $file_name) { header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"{$file_name}\""); echo $data; }