首页 文章

Laravel将文件上传到资源

提问于
浏览
2

在Laravel我有一个资源控制器,我需要处理图片上传 . 在我的create.blade.php中,我有以下形式:

{{ Form::open(array('action' => 'PhotoController@store', 'method' => 'post')); }}
{{Form::text('text'); }}
{{Form::file('photo');}}
{{Form::submit('Submit');}}
{{ Form::close() }}

在我的PhotoController中,我有以下商店功能

public function store()
{
    if (Input::hasFile('photo'))
    {
         return 'Got the photo';
    }
    else { return Input::get('text'); }
}

返回字段'text'的输入,但是看起来Laravel似乎不能找到我上传的照片 . 我试图改变方法来放置和创建一个自定义函数来处理这个,但结果相同 . 为什么我不能让Laravel认出我已经附加了一个文件?

提前致谢

2 回答

  • 2

    您需要将 'files' => true'enctype' =>"multipart/form-data" 添加到您的表单中

    {{ Form::open(array('action' => 'PhotoController@store', 'method' => 'post', 'files' => true, 'enctype' =>"multipart/form-data")); }}
    

    关于 POSTPUT 选项,它取决于您正在做什么 . 在使用 store 资源方法时,应使用 POST . 如果您打算使用 update 方法,那么您将使用 PUT .

    对于资源控制器,方法和HTTP请求的工作方式如下

    +-------------------+-------------+
     | Controller method | HTTP Method |
     +-------------------+-------------+
     | index             | GET         |
     | create            | GET         |
     | store             | POST        |
     | show              | GET         |
     | edit              | GET         |
     | update            | PUT / PATCH |
     | destroy           | DELETE      |
     +-------------------+-------------+
    

    令人困惑的是 createedit ,您可能认为这应该是 POST 但请记住,这是用于编辑或创建项目的表单 .

    获得文件后,您需要对其进行操作 . 因此,接下来您将要对文件执行某些操作,因此您将需要

    $photo = Input::file('photo');
    $photo->move($destinationPath, $fileName);
    

    有关这些和所有其他 Input::file() 方法的文档可以在Laravel documentation here中找到 .

  • 0
    {{ Form::open(array('route' => 'images.store', 'role' => 'form', 'files' => true)) }}
    

    这是我用于文件上传表单的内容,我没有 'enctype''method' 而且我指向路由而不是操作 .

    这是HTML中的翻译内容:

    <form method="POST" action="action url" accept-charset="UTF-8" role="form" enctype="multipart/form-data"><input name="_token" type="hidden" value="token value">
    

    如您所见, 'enctype''method'Form::open 辅助函数添加 . role="form" 用于Bootstrap以正确格式化表单 .

    关于HTML和表单:http://laravel.com/docs/4.2/html

相关问题