【问题标题】:Laravel upload file to resourceLaravel 上传文件到资源
【发布时间】:2014-09-26 23:44:48
【问题描述】:

在 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'); }
}

返回来自“文本”字段的输入,但是 Laravel 似乎无法找到我上传的照片。 我试图改变方法来放置和创建一个自定义函数来处理这个但结果相同。为什么我无法让 Laravel 识别出我附加了文件?

提前致谢

【问题讨论】:

    标签: file-upload laravel


    【解决方案1】:

    您需要像这样将'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 中找到。

    【讨论】:

    • 像魅力一样工作。尚未测试移动功能 - 但它现在注册我已上传文件并在我制作附件时返回“获取照片”。谢谢
    【解决方案2】:
    {{ 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

    【讨论】:

    • 效果也很好。与同样运行良好的 DavidT 相比,此解决方案有什么优势?
    • 确实没有优势,只是指出一些参数是可选的,并且使用路由而不是操作。这不是“另一种解决方案”,我们都指出相同。他的回答很好:)
    猜你喜欢
    • 2019-12-24
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多