我剛開始試用Amazon S3來託管我的網站圖片。我正在使用官方的Amazon AWS PHP SDK庫。使用PHP刪除亞馬遜S3中的文件夾
問題:如何刪除位於S3'文件夾'中的所有文件?例如,如果我有一個名爲images/2012/photo.jpg, I want to delete all files whose filenames start with
images/2012 /`的文件。謝謝!
我剛開始試用Amazon S3來託管我的網站圖片。我正在使用官方的Amazon AWS PHP SDK庫。使用PHP刪除亞馬遜S3中的文件夾
問題:如何刪除位於S3'文件夾'中的所有文件?例如,如果我有一個名爲images/2012/photo.jpg, I want to delete all files whose filenames start with
images/2012 /`的文件。謝謝!
S3沒有像傳統上認爲的文件夾那樣的「文件夾」(某些S3客戶端做得很好,使S3 出現有文件夾)。那些/
實際上是文件名的一部分。
因此,API中沒有「刪除文件夾」選項。您只需要刪除每個具有images/2012/...
前綴的文件。
更新:
這可以通過在亞馬遜S3 PHP客戶端的delete_all_objects
方法來完成。只需在第二個參數(第一個參數是您的存儲桶名稱)中指定"/^images\/2012\//"
作爲正則表達式前綴。
這是一個功能,將做你想要做的事情。
/**
* This function will delete a directory. It first needs to look up all objects with the specified directory
* and then delete the objects.
*/
function Amazon_s3_delete_dir($dir){
$s3 = new AmazonS3();
//the $dir is the path to the directory including the directory
// the directories need to have a/at the end.
// Clear it just in case it may or may not be there and then add it back in.
$dir = rtrim($dir, "/");
$dir = ltrim($dir, "/");
$dir = $dir . "/";
//get list of directories
$response = $s3->get_object_list(YOUR_A3_BUCKET, array(
'prefix' => $dir
));
//delete each
foreach ($response as $v) {
$s3->delete_object(YOUR_A3_BUCKET, $v);
}//foreach
return true;
}//function
用途: 如果我想刪除目錄富
Amazon_s3_delete_dir("path/to/directory/foo/");
從S3刪除文件夾及其所有文件的最佳方法是使用API deleteMatchingObjects()
$s3 = S3Client::factory(...);
$s3->deleteMatchingObjects('YOUR_BUCKET_NAME', '/some/dir');
非常感謝luigi。你讓我的工作變得如此簡單.. :) – 2016-05-14 09:37:08
Luigi,有一件事想問你,這個API deleteMatchingObjects()給出了任何成功的消息。 – 2016-05-14 09:40:37
如果沒有發生異常,則表示成功。檢查deleteMatchingObjects()的返回值也是有用的,它的int值等於已刪除鍵的數量。 – 2016-05-16 07:10:36
是有沒有在S3庫中的任何功能可以選擇所有文件的文件名中包含特定字符串? – Nyxynyx 2012-03-11 20:03:30
是通過'delete_all_objects'方法。您可以指定正則表達式來刪除與表達式匹配的存儲桶中的所有文件。文檔和示例在這裏:http://docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/delete_all_objects – nategood 2012-03-12 01:15:01