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

但是当我运行它时,出现以下错误:Call to a member function getClientOriginalName()on a non-object

4

5 回答 5

39

您需要在表单上启用文件输入。文档

在 Laravel 中,您可以使用:

Form::open('image/save', array('files'=> true))

或者

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

否则,您从文件输入中收到的只是文件名作为字符串。

于 2013-05-19T14:33:50.710 回答
11

如果您不使用 Blade 生成这样的表单

{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}

只需将此参数添加到您的表单标签

enctype="multipart/form-data"
于 2013-07-28T10:09:32.047 回答
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"

于 2013-07-10T11:02:59.537 回答
2

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

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

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

祝你好运!:)

于 2013-06-28T17:50:04.977 回答
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">

希望这会帮助你。

于 2014-02-28T10:02:09.607 回答