Laravel 4 上传图片表单
Posted
技术标签:
【中文标题】Laravel 4 上传图片表单【英文标题】:Laravel 4 upload image form 【发布时间】:2013-05-14 04:41:18 【问题描述】:我正在尝试制作一个允许上传文件并将其存储在应用程序的 public/upload 文件夹中的表单。
我的表格是:
<form action="/image/save" method="post">
<input name="image" type="file" />
<input type="submit" value="Save"/>
</form>
和控制器:
public function save()
$file = Input::file('image');
$destinationPath = 'upload/';
$filename = $file->getClientOriginalName();
Input::file('image')->move($destinationPath, $filename);
但是当我运行它时,我收到以下错误:
在非对象上调用成员函数getClientOriginalName()
【问题讨论】:
您正在使用 $file->getClientOriginalName()。它与 $file 无关 【参考方案1】:如果您使用类似 Laravel 的表单样式,则可以在 array()
中添加字段 'files'=> true
Form::open(array('url'=>'/images/save','role'=>'form','files'=> true))
否则你可以使用类似的html表单标签
<form action="/images/save" method="post" enctype="multipart/form-data">
希望这会对你有所帮助。
【讨论】:
【参考方案2】:我的一个表单也遇到了同样的问题,问题是表单没有使用 'files' => true
选项定义,它告诉 Laravel4 表单助手使用 enctype="multipart/form-data"
定义表单
这是我所做的:
在您的控制器中定义以下数组并将其传递给您的视图,
$form_options = array (
'url' => 'path/to/defined/route',
'class' => 'form-horizontal',
'name' => 'newUser',
'files' => true
);
在您看来,如下定义您的表单:
Form::open( $form_options )
这将使用enctype="multipart/form-data"
定义您的表单
【讨论】:
我忘了说文件;我有文件!愚蠢的我【参考方案3】:您需要在表单上启用file input。 (Doc)
在 Laravel 中,你可以使用:
Form::open('image/save', array('files'=> true))
或
<form action="/images/save" method="post" enctype="multipart/form-data">
否则,您从文件输入中收到的只是文件名作为字符串。
【讨论】:
但我不明白你要在哪里写这个? 在您的视图中,而不是 HTML 问题:您在文档中的哪里找到'files'=>true
?我在表单和输入部分下进行了搜索,但一无所获..
@Valentin 这可以在 Illuminate/Html 的 FormBuilder 中找到 github.com/laravel/framework/blob/master/src/Illuminate/Html/… 这也列在打开表单下的laravel.com/docs/html#file-input 文档中。
对于不想使用 laravel 的 Form Helper 的人来说,在你的 form 标签中添加enctype="multipart/form-data"
属性就足够了。【参考方案4】:
如果你不使用 Blade 来生成这样的表单
Form::open(array('url' => 'foo/bar', 'files' => true))
只需将此参数添加到您的表单标签中
enctype="multipart/form-data"
【讨论】:
'files' => true
,这就是我要搜索的内容。【参考方案5】:
您必须按如下方式获取文件名:
//Blade form
Form::open_for_files('/image/save')
Form::file('image')
Form::close()
//get imagename
$filename = Input::file('image.name');
祝你好运! :)
【讨论】:
以上是关于Laravel 4 上传图片表单的主要内容,如果未能解决你的问题,请参考以下文章