Laravel 4上传图片表格

时间:2013-05-19 14:24:52

标签: php frameworks laravel laravel-4

我正在尝试制作一个允许上传文件并将其存储在应用程序的公共/上传文件夹中的表单。

我的表格是:

<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()

5 个答案:

答案 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">

希望这会对你有所帮助。