foreach 语句导致多文件上传中未定义的变量 fileNameToStore
Posted
技术标签:
【中文标题】foreach 语句导致多文件上传中未定义的变量 fileNameToStore【英文标题】:foreach statement causes undefined variable fileNameToStore in multiple file upload 【发布时间】:2021-04-08 11:00:33 【问题描述】:我尝试上传多个文件,因此我尝试稍微修改代码。但每次我添加 foreach($request->file('image') as $file)。我总是收到有关未定义变量的错误。我在下面附上了我的控制器代码,知道如何解决这个问题并进行多文件上传吗?
if($request->hasFile('image'))
foreach($request->file('image') as $file)
$filenameWithExt =$request->file('image')->getClientOriginalName();
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
$extension = $request->file('image')->getClientOriginalExtension();
$fileNameToStore = $filename. '_'.time().'.'.$extension;
$path = $request->file('image')->storeAs('public/images', $fileNameToStore);
$post = new Post;
$post->image = $fileNameToStore;
$post->save();
return redirect('/dashboard')->with('success', 'Post Created!');
这里是create.blade.php
@extends('layouts.app')
@section('content')
<h1>Upload Images</h1>
!! Form::open(['action' => 'PostsController@store', 'method'=> 'POST','enctype'=>'multipart/form-data'])!!
<div class="form-group">
Form::file('image',['multiple'=>'true', 'files'=>'true'])
</div>
Form::submit('Submit',['class' => 'btn btn-success'])
!!Form::close()!!
【问题讨论】:
我可以出示表格吗? 你能发布你的错误吗?undefined variable
什么?
!! Form::open(['action' => 'PostsController@store', 'method'=> 'POST','enctype'=>'multipart/form-data'])!! Form::file('cover_image',['multiple'=>'true', 'files'=>'true']) Form::submit('Submit' ,['class' => 'btn btn-success']) !!Form::close()!!
我得到未定义的变量:fileNameToStore 错误
@Kaye 我认为你应该把你的 html 也放进去,这样我们就可以看到它是多个图像数组,并且可以为你编写完整的解决方案
【参考方案1】:
如果我正确理解你。尝试在foreach
中添加fileNameToStore
变量:
$errors = [];
$post = new Post;
if ($request->hasFile('cover_image'))
foreach ($request->file('cover_image') as $file)
$filenameWithExt =$request->file('image')->getClientOriginalName();
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
$extension = $request->file('image')->getClientOriginalExtension();
$fileNameToStore = $filename. '_'.time().'.'.$extension;
$path = $request->file('image')->move('public/images', $fileNameToStore);
$post->cover_image = $fileNameToStore;
if (! fileNameToStore)
$errors[] = false;
if (count($errors) > 0)
return redirect('/dashboard')->with('error', 'Somthing went wrong!');
$post->save()
return redirect('/dashboard')->with('success', 'Post Created!');
希望对您有所帮助。 PS 将image
替换为cover_image
。
【讨论】:
哇,它成功了!但没有上传文件。它只是说帖子已创建但不是文件夹中的文件 @Kaye 请检查上传目录权限 @Kaye 我编辑了我的答案。我认为您需要将$request->file('image')->storeAs
替换为$request->file('image')->move
哦,我没有注意到您的编辑。它现在正在工作。谢谢德米特里【参考方案2】:
你得到Undefined variable: fileNameToStore
这意味着你没有得到文件并且仍然尝试访问$fileNameToStore
所以你需要在这样的if条件中添加它
if ($request->hasFile('image'))
foreach ($request->file('image') as $file)
$filenameWithExt = $request->file('image')->getClientOriginalName();
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
$extension = $request->file('image')->getClientOriginalExtension();
$fileNameToStore = $filename . '_' . time() . '.' . $extension;
$path = $request->file('image')->storeAs('public/images', $fileNameToStore);
$post = new Post;
$post->cover_image = $fileNameToStore;
$post->save();
return redirect('/dashboard')->with('success', 'Post Created!');
return redirect('/dashboard')->with('error', 'Somthing went wrong!');
注意这只是
Undefined variable: fileNameToStore
不上传图片的解决方案
【讨论】:
如何修复我的代码以使多个文件上传正常工作? 是$request->file('image')
这个图像数组吗?是你的用途
我不太确定。我只是学习 laravel 的新手
试试dd($request->file('image'))
并检查
Illuminate\Http\UploadedFile #1216 ▼ -test: false -originalName: "img1.jpg" -mimeType: "image/jpeg" -error: 0 #hashName: null path: "C: \xampp\tmp" 文件名:"phpA275.tmp" 基名:"phpA275.tmp" 路径名:"C:\xampp\tmp\phpA275.tmp" 扩展名:"tmp" 真实路径:"C:\xampp\tmp\phpA275. tmp" aTime: 2021-04-08 11:30:20 mTime: 2021-04-08 11:30:20 cTime: 2021-04-08 11:30:20 inode: 0 size: 29888 perms: 0100666 owner: 0组:0 类型:“文件”可写:真可读:真可执行:假文件:真目录:假链接:假以上是关于foreach 语句导致多文件上传中未定义的变量 fileNameToStore的主要内容,如果未能解决你的问题,请参考以下文章
C# Foreach 语句不包含 GetEnumerator 的公共定义