2016-10-12 2 views
4

Ich Laravel Dateispeicherfunktionalität mit einer Datei speichern:Laravel 5.3 Lagerung :: setzen erstellt ein Verzeichnis mit dem Dateinamen

public function dataPost(Request $request) { 

    $fileInForm = 'doc'; 

    if ($request->hasFile($fileInForm)) { 

     $file = $request->file($fileInForm); 
     if ($file->isValid()) { 

      // Filename is hashed filename + part of timestamp 
      $hashedName = hash_file('md5', $file->path()); 
      $timestamp = microtime() * 1000000; 

      $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension(); 

      Storage::disk('local')->put($newFilename, $file); 
     } 
    } 
} 

Dadurch wird die Datei nicht speichern, sondern in einem Verzeichnis der benannt werden wie die Datei, zum Beispiel:

storage/app/952d6c009.jpg/952d6c009.jpg

oder

storage/app/234234234.jpg/234234234.jpg

Wird das erwartet? Gibt es eine Möglichkeit, die Datei einfach ohne ein separates Verzeichnis für jede Datei zu speichern?

Danke!

Antwort

9

Sie die Dateiinhalte zur Verfügung stellen müssen in das zweite Argument nicht Datei Objekt, versuchen Sie dies:

Storage::disk('local')->put($newFilename, file_get_contents($file));

2

Dies passierte, weil Sie das Verzeichnis angeben, das als Dateiname gespeichert werden soll. Die newFilename, sollte der Verzeichnisname wie "Bilder" sein. Siehe dieser Linie

Storage::disk('local')->put($newFilename, $file); 

So könnte man das ändern zu

Storage::disk('local')->putFile('images', $file); 

dann erhalten Sie den Pfad gespeichert bei storage/app/images/234234234.jpg

+0

In welchem ​​Fall erhält die Datei den neuen Dateinamen? Soll ich das '$ file' Objekt bearbeiten um den Dateinamen zu aktualisieren? Etwas wie '$ file-> originalName = $ newFilename;'? – zundi

+0

können Sie das tun oder @ ABDEL-RHMAN verwenden – xmhafiz