Laravel 5.4 文件上传错误 - 由于未知错误,文件名未上传
Laravel 5.4 file uploading error - fileName not uploaded due to an unknown error
我正在尝试通过 laravel 中的以下代码上传多张图片。在我的表单中,有 3 种类型的图像需要 select 上传。当用户select所有图片然后提交表单。我需要将所有图像上传到同一个文件夹。第一张图片上传到文件夹中。但随后它给了我以下错误。
The file "1575738164-main-slider2.webp" was not uploaded due to an unknown error.
控制器
if ($request->hasFile('image') && $request->hasFile('image_575') && $request->hasFile('image_768')){
$file = $request->image;
$file_575 = $request->image_575;
$file_768 = $request->image_768;
$name = time().'-'.$file->getClientOriginalName();
$name_575 = time().'-'.$file_575->getClientOriginalName();
$name_768 = time().'-'.$file_768->getClientOriginalName();
$names = [ $name , $name_575 , $name_768];
foreach ( $names as $n){
$file->move('uploads/banners/',$n);
}
$banner = new Banner();
$banner->name = $name;
$banner->name_575 = $name_575;
$banner->name_768 = $name_768;
$banner -> side_color = $request -> side_color ;
$banner->type = $request->type;
$banner->save();
}
请注意,我几乎已经完成了以下问题。
Laravel: 由于未知错误,文件未能上传
首先,仅使用time()
方法无法始终为所有三个图像生成唯一的文件名,并且在并发请求发生时。
第二个:
$names = [ $name , $name_575 , $name_768];
foreach ( $names as $n){
$file->move('uploads/banners/',$n);
}
你循环的是完全错误的。您正在尝试移动同一张图片 $file 三次。
您必须在循环内移动所有三个图像:
`
$file = $request->image;
$file_575 = $request->image_575;
$file_768 = $request->image_768;
`
所以,你可能应该这样做:
$filesToMoves = [$name=> $file, $name_575 => $file2 , $name_768 => $file3];
foreach($filesToMoves as $fileName => $fileToMove){
$fileToMove->move('uploads/banners/',$fileName);
}
我将添加我的代码以供将来参考以解决此问题
public function store(Request $request)
{
$this -> validate ( request () , [
'image' => 'required|mimes:webp|dimensions:max_width=1200,max_height=380|max:50' ,
'image_575' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=575,max_height=380|max:80' ,
'image_768' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=768,max_height=380|max:80' ,
] ) ;
if ($request->hasFile('image') && $request->hasFile('image_575') && $request->hasFile('image_768')){
$fils = [$request->image, $request->image_575, $request->image_768];
$formats = ['webp' , '575','768'];
$fileNames = [];
$i = 0;
foreach($fils as $file){
$name = time().'_'.$formats[$i].'.'.$file->getClientOriginalExtension();
$file->move('uploads/banners/', $name);
array_push($fileNames, $name);
$i++;
}
$a= new X();
$a->name = $fileNames[0];
$a->image_575 = $fileNames[1];
$a->image_768 = $fileNames[2];
$a->save();
}
这仅供参考。
我正在尝试通过 laravel 中的以下代码上传多张图片。在我的表单中,有 3 种类型的图像需要 select 上传。当用户select所有图片然后提交表单。我需要将所有图像上传到同一个文件夹。第一张图片上传到文件夹中。但随后它给了我以下错误。
The file "1575738164-main-slider2.webp" was not uploaded due to an unknown error.
控制器
if ($request->hasFile('image') && $request->hasFile('image_575') && $request->hasFile('image_768')){
$file = $request->image;
$file_575 = $request->image_575;
$file_768 = $request->image_768;
$name = time().'-'.$file->getClientOriginalName();
$name_575 = time().'-'.$file_575->getClientOriginalName();
$name_768 = time().'-'.$file_768->getClientOriginalName();
$names = [ $name , $name_575 , $name_768];
foreach ( $names as $n){
$file->move('uploads/banners/',$n);
}
$banner = new Banner();
$banner->name = $name;
$banner->name_575 = $name_575;
$banner->name_768 = $name_768;
$banner -> side_color = $request -> side_color ;
$banner->type = $request->type;
$banner->save();
}
请注意,我几乎已经完成了以下问题。 Laravel: 由于未知错误,文件未能上传
首先,仅使用time()
方法无法始终为所有三个图像生成唯一的文件名,并且在并发请求发生时。
第二个:
$names = [ $name , $name_575 , $name_768];
foreach ( $names as $n){
$file->move('uploads/banners/',$n);
}
你循环的是完全错误的。您正在尝试移动同一张图片 $file 三次。
您必须在循环内移动所有三个图像: `
$file = $request->image;
$file_575 = $request->image_575;
$file_768 = $request->image_768;
`
所以,你可能应该这样做:
$filesToMoves = [$name=> $file, $name_575 => $file2 , $name_768 => $file3];
foreach($filesToMoves as $fileName => $fileToMove){
$fileToMove->move('uploads/banners/',$fileName);
}
我将添加我的代码以供将来参考以解决此问题
public function store(Request $request)
{
$this -> validate ( request () , [
'image' => 'required|mimes:webp|dimensions:max_width=1200,max_height=380|max:50' ,
'image_575' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=575,max_height=380|max:80' ,
'image_768' => 'required|mimes:jpeg,png,jpg|dimensions:max_width=768,max_height=380|max:80' ,
] ) ;
if ($request->hasFile('image') && $request->hasFile('image_575') && $request->hasFile('image_768')){
$fils = [$request->image, $request->image_575, $request->image_768];
$formats = ['webp' , '575','768'];
$fileNames = [];
$i = 0;
foreach($fils as $file){
$name = time().'_'.$formats[$i].'.'.$file->getClientOriginalExtension();
$file->move('uploads/banners/', $name);
array_push($fileNames, $name);
$i++;
}
$a= new X();
$a->name = $fileNames[0];
$a->image_575 = $fileNames[1];
$a->image_768 = $fileNames[2];
$a->save();
}
这仅供参考。