2016-11-03 1 views
1

Ich konvertiere eine Laravel (5.3) -App, um AWS S3 als Bildspeicher zu verwenden. Ich muss programmatisch eine Liste von Bildern erhalten, deren Namen einer bestimmten Maske entsprechen (zB 'FS_1054 _ *. JPG'), was ich bei Verwendung von lokalem Speicher leicht mit der Funktion glob() machen konnte.Auflisten von Dateien mithilfe von Platzhaltern mit Laravel Storage und AWS S3

Irgendwelche Vorschläge, wie ich das mit S3 machen könnte?

+0

was wie macht Ihr Eimer aussehen? Speichern Sie Bilder wie 'Ordner/Ordner/FS_1054_01.JPG'? Sie können nach 'Präfix 'suchen, aber es ist etwas schwieriger, wenn Ihre Bilder in Ordnern wie meinem Beispiel verschachtelt sind. – cmorrissey

+0

Ja, sie sind in Ordnern verschachtelt. –

Antwort

0

Ich habe eine Antwort gefunden, obwohl ich glücklich bin zu wissen, ob es eine bessere gibt.

Verwenden Sie Storage :: files (folder_name), um alle Dateien im Ordner aufzulisten. Dadurch wird ein Array zurückgegeben. Dann nutzen Sie array_where und starts_with die Liste zu filtern:

$files = array_where($files, function ($value, $key) use ($mask) { 
    return starts_with(basename($value), $mask); 
}); 
+0

besserer Weg wird sein, den Dateinamen in der Datenbank zu speichern .. darüber nachdenken, was passiert, wenn Sie Millionen von Bildern haben? –

0

Versuchen Unterordner basierend auf dem Dateinamen als „Index“, mit denen Sie benötigen, um die Suche zu schaffen, so haben Sie so etwas wie:

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... 

So Sie können die Liste bekommen mit

Storage::disk('s3')->files('foo/bar/FS_1054') 

Je nachdem, wie feinkörnig Sie wollen, suchen können Sie mehr verschachtelten Ordner möglicherweise müssen:

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... 

Obwohl dies würde erlauben Ihnen:

Storage::disk('s3')->allFiles('foo/bar/FS') 
(note: allFiles() used for recursive listing) 

und

Storage::disk('s3')->files('foo/bar/FS/1054') 
Verwandte Themen