🍖

AzureBlobストレージのファイルを削除する(php)

1 min read

本当はディレクトリ指定して下層にあるやつ丸ごと削除したかったが
仮想ディレクトリだから出来ないらしいので
対象のディレクトリ内のファイルリストを取得→1ファイルごとに削除処理するしかないらしい
とてもめんどくさい

public function deleteBlob(){
	$listBlobsOptions = new ListBlobsOptions();
	$listBlobsOptions->setPrefix("対象のディレクトリ名");
	$fileList = $this->blobClient->listBlobs("コンテナ名", $listBlobsOptions);
	foreach ($fileList->getBlobs() as $val){
		$this->blobClient->deleteBlob("コンテナ名",$val->getName());
	}
	return ;
}

解説

ListBlobOptionsでプレフィックスを指定する

コンテナ以下の下層ディレクトリにあたる部分を指定

container/folder1/folder2/test1.txt
container/folder1/folder2/test2.txt
container/folder1/folder2/test3.txt
container/folder1/folder2/test4.txt

↑こういう時、folder2以下にあるテキストファイルを全部削除したい場合は

$listBlobsOptions->setPrefix("folder1/folder2");

と指定しましょう。

指定したPrefix内のファイル一覧を取得

listBlobsで対象のコンテナに対してBlobsOptionを付与
fileListに一覧データが入ります。

1個ずつ取り出して削除処理を実行する

fileList内にBlobsメンバがあるのでfileList->Blobsをforeachでブン回したら
privateだからアクセス出来ないよ!って言われたので、
ソースを読んでみたらgetBlobsってpublicメソッドがあったからそれを使う。
同様にBlob->nameもprivateだったのでgetNameメソッドで取得。

おわり。