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'=&gt; true

 Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) 

否则你可以使用类似的html表单标签

<form action="/images/save" method="post" enctype="multipart/form-data">

希望这会对你有所帮助。

【讨论】:

【参考方案2】:

我的一个表单也遇到了同样的问题,问题是表单没有使用 'files' =&gt; 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'=&gt;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' =&gt; true ,这就是我要搜索的内容。【参考方案5】:

您必须按如下方式获取文件名:

//Blade form
 Form::open_for_files('/image/save') 
 Form::file('image') 
 Form::close() 

//get imagename
$filename = Input::file('image.name');

祝你好运! :)

【讨论】:

以上是关于Laravel 4 上传图片表单的主要内容,如果未能解决你的问题,请参考以下文章

laravel上的图片上传无法在线使用

如何使用 Laravel 4 将图片上传到谷歌?

Laravel 4 上传 1 张图片并保存为多张 (3)

Laravel 5.4 显示上传的图片问题

Laravel 4.2输入文件空

laravel 4.2 存储/上传个人资料图片并从数据库中检索