我正在轉換Laravel(5.3)應用程序以使用AWS S3作爲圖像存儲。我需要以編程方式獲得名稱符合特定掩碼的圖像列表(例如'FS_1054 _ * .JPG'),當我使用本地存儲時,我可以很輕鬆地使用glob()函數。使用通配符在Laravel存儲和AWS S3中列出文件
任何關於如何使用S3做到這一點的建議?
我正在轉換Laravel(5.3)應用程序以使用AWS S3作爲圖像存儲。我需要以編程方式獲得名稱符合特定掩碼的圖像列表(例如'FS_1054 _ * .JPG'),當我使用本地存儲時,我可以很輕鬆地使用glob()函數。使用通配符在Laravel存儲和AWS S3中列出文件
任何關於如何使用S3做到這一點的建議?
我找到了答案,但很高興知道是否有更好的答案。
使用Storage :: files(folder_name)列出文件夾中的所有文件,這將返回一個數組。然後使用array_where和STARTS_WITH過濾列表:
$files = array_where($files, function ($value, $key) use ($mask) {
return starts_with(basename($value), $mask);
});
更好的方法是將文件名存儲在數據庫中。想想看,當你擁有數百萬的圖像時會發生什麼? –
嘗試根據文件名由你需要搜索的「指數」創建子文件夾,讓你有這樣的:
s3://bucket/foo/bar/FS_1054/FS_1054_123.jpg
s3://bucket/foo/bar/FS_1054/FS_1054_124.jpg
s3://bucket/foo/bar/FS_1055/FS_1055_123.jpg
s3://bucket/foo/bar/FS_1055/FS_1055_124.jpg
etc...
所以你可以使用
Storage::disk('s3')->files('foo/bar/FS_1054')
名單根據你想如何細粒至能夠搜索,則可能需要更多的嵌套的文件夾:
s3://bucket/foo/bar/FS/1054/FS_1054_123.jpg
s3://bucket/foo/bar/FS/1054/FS_1054_124.jpg
s3://bucket/foo/bar/FS/1055/FS_1055_123.jpg
s3://bucket/foo/bar/FS/1055/FS_1055_124.jpg
s3://bucket/foo/bar/FT/1054/FT_1054_123.jpg
s3://bucket/foo/bar/FT/1054/FT_1054_124.jpg
s3://bucket/foo/bar/FT/1055/FT_1055_123.jpg
s3://bucket/foo/bar/FT/1055/FT_1055_124.jpg
etc...
雖然這將允許您:
Storage::disk('s3')->allFiles('foo/bar/FS')
(note: allFiles() used for recursive listing)
和
Storage::disk('s3')->files('foo/bar/FS/1054')
那麼你的水桶是什麼樣子?你是否存儲像「文件夾/文件夾/ FS_1054_01.JPG」的圖像?你可以用'前綴'來搜索,但是如果你的圖像像我的例子那樣嵌套在文件夾中,它會更難一些。 – cmorrissey
是的,它們嵌套在文件夾中。 –