が、私は、単一の画像のファイルアップロード方法は、次のコードを使用して、正常に動作してい動作していない店舗()メソッド:Laravel突然
$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
はstore()
方法作品ここUploadedFile
のインスタンスであり、完全に。
しかし、複数のファイルをアップロードできるようにするには、この方法を変更する必要がありました。次適応コードは、次のエラーをネット:
$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
さんdd
出力:
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
}
Laravelが適切store()
を持ってIlluminate\Http\UploadedFile
を使用しなければならないとして、かなり奇妙ですメソッド(docs)は、そのメソッドを持たないSymfonyのクラス(docs)
また、symfonyのmove()
を使用すると、store()
はすでに生成されたファイル名と拡張子を持つファイルを保存しているため、ランダムファイル名を生成して拡張子を推測する必要はありません。
ボトムラインはどうしてそういうふうに振る舞うのですが、どうすれば適切なクラスインスタンスを使うことができますか?
のようなものをやってみてください;'出力? – Jonathon
'' Symfony \ Component \ HttpFoundation \ File \ UploadedFile "' –
以前の作業単一アップロードからの 'dd(get_class($ request-> file( 'file')')の出力: '' Illuminate \ Http \ UploadedFile '' –