Ich verwende die Dateispeicherfunktion von Laravel, um eine Datei zu speichern:
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 gespeichert, jedoch in einem Verzeichnis, das wie die Datei bezeichnet wird. Beispiel:
storage/app/952d6c009.jpg/952d6c009.jpg
oder
storage/app/234234234.jpg/234234234.jpg
Wird das erwartet? Gibt es eine Möglichkeit, die Datei ohne ein separates Verzeichnis für jede Datei zu speichern?
Vielen Dank!
sie müssen den Dateiinhalt im zweiten Argument und nicht im Dateiobjekt angeben. Versuchen Sie Folgendes:
Storage::disk('local')->put($newFilename, file_get_contents($file));
Dies geschah, weil Sie das Verzeichnis angeben, das als Dateiname gespeichert werden soll. newFilename
sollte der Verzeichnisname sein, z. B. 'images'. Siehe diese Zeile
Storage::disk('local')->put($newFilename, $file);
Sie könnten das also ändern
Storage::disk('local')->putFile('images', $file);
Dann wird der Pfad unter storage/app/images/234234234.jpg
gespeichert.
$ file is encoded. Sie müssen die Datei entschlüsseln.
Storage :: disk ('local') -> put ($ newFilename, File :: get ($ file));
Storage::disk('local')->putFileAs('', $file, $filenewname);