我正在尝试制作一个允许上传文件并将其存储在应用程序的公共/上传文件夹中的表单。
我的表格是:
<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()
答案 0 :(得分:38)
您需要在表单上启用file input。 (Doc)
在Laravel中,您可以使用:
Form::open('image/save', array('files'=> true))
或
<form action="/images/save" method="post" enctype="multipart/form-data">
否则,您从文件输入接收的所有文件名都是字符串。
答案 1 :(得分:11)
如果你不使用Blade生成这样的表格
{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}
只需将此参数添加到表单标记
即可enctype="multipart/form-data"
答案 2 :(得分:8)
我的一个表单也遇到了同样的问题,问题是表单没有使用选项'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 :(得分:2)
您必须按如下方式获取文件名:
//Blade form
{{ Form::open_for_files('/image/save') }}
{{ Form::file('image') }}
{{ Form::close() }}
//get imagename
$filename = Input::file('image.name');
祝你好运! :)
答案 4 :(得分:1)
如果您使用Laravel表单样式,则可以在'files'=> true
中添加字段array()
{{ Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) }}
否则你可以使用类似
的html表单标签<form action="/images/save" method="post" enctype="multipart/form-data">
希望这会对你有所帮助。