ich eine Datei-Upload-Methode für ein einzelnes Bild haben ordnungsgemäß funktioniert, mit dem folgenden Code:Laravel - store() -Methode plötzlich nicht funktioniert
$file = $request->file('file');
if ($file && $file->isValid()) {
$photo['size'] = $request->file('file')->getClientSize();
$path = $request->file('file')->store($request->subdomain);
$path = explode('/', $path);
$photo['file'] = $path[1];
$photo['cover'] = 1;
$photo['gallery'] = $newGallery->id;
$photo['uploaded_by'] = $user->id;
Photo::create($photo);
}
$file
ist eine Instanz von UploadedFile
hier, und die store()
Methode funktioniert perfekt.
Allerdings musste ich die Methode ändern, damit mehrere Dateien hochgeladen werden können. Das folgende angepasst Code Netze der folgenden Fehler:
$photos = $request->files->all();
foreach($photos as $photo) {
foreach($photo as $p) {
if($p->isValid()) {
$path = $p->store($request->subdomain);
$path = explode('/', $path);
$newPhoto = [
'uploaded_by' => $user->id,
'file' => $path[1],
'size' => $p->getClientSize(),
'gallery' => $request->gallery,
'subdomain' => $request->subdomain,
];
Photo::create($requestData);
}
}
}
Call to undefined method Symfony\Component\HttpFoundation\File\UploadedFile::store()
$p
‚s dd
Ausgang:
UploadedFile {#28 ▼
-test: false
-originalName: "Untitled.png"
-mimeType: "image/png"
-size: 18030
-error: 0
path: "/tmp"
filename: "phpBDSWCR"
basename: "phpBDSWCR"
pathname: "/tmp/phpBDSWCR"
extension: ""
realPath: "/tmp/phpBDSWCR"
aTime: 2017-09-19 20:19:57
mTime: 2017-09-19 20:19:57
cTime: 2017-09-19 20:19:57
inode: 3014878
size: 18030
perms: 0100600
owner: 1000
group: 1000
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
das ist ziemlich seltsam, wie Laravel Illuminate\Http\UploadedFile
verwendet werden soll, die die richtigen store()
hat Methode (docs) gegen Symfony-Klasse, die diese Methode nicht hat (docs)
Auch die Verwendung von Symfony move()
ist viel schlimmer, wie store()
speichert bereits die Datei mit einem generierten Dateinamen und der Erweiterung, so muss ich nicht die Erzeugung eines zufälligen Dateinamen und erraten die Erweiterung, da es nicht sehr zuverlässig ist.
Fazit ist: warum verhält es sich so, und wie kann ich es die richtige Klasseninstanz verwenden?
Was bedeutet 'dd (get_class ($ p));' Ausgang? – Jonathon
'" Symfony \ Component \ HttpFoundation \ Datei \ UploadedFile "' –
Ausgabe von 'dd (get_class ($ request-> file ('file')' 'von dem vorherigen funktionierenden einzelnen Upload:' "Illuminate \ Http \ UploadedFile" ' –