2017-07-25 5 views
1

i ein Formular mit Slug haben, Eingabedateien usw.Laravel - Notwendigkeit bestimmte Namen von Dateien und Ordnern mit Speicherfunktion

ich brauche, wenn ich por Beispiel in Form gebracht:

slug = hello-how-are-you

file = header.png

file2 = home.png

Laravel erstellen mir einen Ordner in Speicher wie thi s: /projects/hello-how-are-you mit der header.png und home.png.

Ich versuche es, aber kann es nicht tun .. ich versuche, mit so etwas wie folgt aus:

public function storeProject(Request $request) 
{ 
    $project = new Project(); 
    $project->slug = $request->input("slug"); 
    $namefolder = $project->slug; 
    $project->position = $request->input("position"); 
    $project->public = $request->input("public"); 
    $header = $request->file('pathheader'); 
    $home = $request->file('pathhome'); 
    $project->pathheader = $header; 
    $project->pathhome = $home; 
    \Storage::disk('projects')->put('header.png', \File::get($header)); 
    $project->save(); 
} 

In Dateisystem Ich habe dies:

'disks' => [ 

    'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app'), 
    ], 

    'public' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/public'), 
     'url' => env('APP_URL').'/storage', 
     'visibility' => 'public', 
    ], 
    'projects' => [ 
     'driver' => 'local', 
     'root' => storage_path() . '/projects', 
    ], 
    's3' => [ 
     'driver' => 's3', 
     'key' => env('AWS_KEY'), 
     'secret' => env('AWS_SECRET'), 
     'region' => env('AWS_REGION'), 
     'bucket' => env('AWS_BUCKET'), 
    ], 

], 

GELÖST! Dank @ Dees040 Wenn Sie den Namen der Datei zerschlagen wollen und tun es ohne foreach, können Sie es wie folgt tun:

public function storeProject(Request $request) 
     { 
     $project = new Project(); 
     $project->slug = $request->input("slug"); 
     $project->position = $request->input("position"); 
     $project->public = $request->input("public"); 
     $project->pathheader = $request->file('pathheader'); 
     $project->pathhome = $request->file('pathhome'); 
     \Storage::disk('projects')->makeDirectory($project->slug); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png'); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png'); 
     $project->save(); 
     } 
+1

Does '\ Storage :: Disk ('Projekte') -> setzen ($ Ausbau-> Slug . "/ header.png") 'Arbeit? – apokryfos

+0

@apokryfos kein Kumpel, wenn ich das tun, wird der Dateiname hallo sein-wie-bist-yoheader.png hahah –

+0

Also ist etwas den Schrägstrich schlucken? – apokryfos

Antwort

1

Dies könnte den Trick für Sie tun:

public function storeProject(Request $request) 
{ 
    $project = Project::create($request->only('slug', 'position', 'public', 'pathheader', 'pathhome')); 

    \Storage::disk('projects')->makeDirectory($project->slug); 

    foreach ($request->allFiles() as $file) { 
     \Storage::disk('projects')->putFileAs($project->slug, $file, $file->getClientOriginalName()); 
    } 
} 

Hoffe, das hilft.

+0

Hallo @ Dees040 wenn ich dies mache, ist das Verzeichnis gut erstellt, aber der Name der Datei ist etwas wie: aisudadljlasiuaiosdiaosp328ralka.png, ich versuche es vorher .. weiß, wie man einen bestimmten Namen setzt? –

+0

Danke Kumpel. Es klappt. Ich mache es ein bisschen anders, weil ich nicht bin, wer die APP benutzen wird, also ziehe ich es vor, den Namen der Datei zu zerschlagen, also wo du $ file-> getClientoriginalName() setzst, setze ich 'header.png' oder 'home.png' . Wissen, wie man es mit foreach macht? Ich denke es ist besser ohne. Danke trotzdem, +1! –

+0

Ja, Sie können es ohne eine foreach völlig tun. Ich bin froh, dass es geholfen hat! Sie können diese Antwort als Lösung markieren, damit sie anderen Menschen helfen kann. Prost! –

0

Erstellen Sie das Verzeichnis zuerst:

use Illuminate\Support\Facades\Storage; 

Storage::disk('projects')->makeDirectory($namefolder); 

Und dann speichern die Dateien:

$project->pathheader = Storage::disk('projects')->putFileAs($namefolder, $header, $header->getClientOriginalName()); 
$project->pathhome = Storage::disk('projects')->putFileAs($namefolder, $home, $home->getClientOriginalName()); 
+0

Wenn ich das tue, wird Projektordner nicht erstellt und der Name der Datei ist aosidasdadla23232das.png .. –

+0

Ich habe vergessen, die Festplatte zu wählen, und wenn Sie die generierte eindeutige ID nicht wollen, können Sie 'putFile' mit ersetzen 'putFileAs' Ich habe meine Antwort aktualisiert. –

Verwandte Themen