如何在Laravel中读取FormData对象

时间:2017-06-04 13:01:12

标签: ajax laravel file laravel-5.4

我正在尝试将提交表单提交给Laravel 5控制器方法。我理解在php中,您可以定义FormData对象,将输入字段附加到对象并将其发送到服务器,您现在可以使用输入字段名称提取值。

像这样:

var form_data = new FormData();
formdata.append('file_name', 'some_file_name_from_form.png');

在ajax调用中form_data作为data发送时,我可以使用$_FILES['file_name']['name'];在PHP中获取该文件。

所以我在Laravel控制器方法中尝试了相同的逻辑。我只是想在$request对象中获取文件的名称,但只是为空。

我的控制器方法:

public function postImage(Request $request)
{
    $file = $request->get('file_name');

    dd($file);
}

但是当我dd整个请求时,我看到了这个奇怪的对象:

  

数组:1 [     " FILE_NAME" => UploadedFile {#199       -test:false       -originalName:" work-fitness_00255959.png"       -mimeType:" image / png"       -size:34215       -error:0       #hashName:null       路径:" / tmp"       filename:" phpVodsUg"       basename:" phpVodsUg"       路径名:" / tmp / phpVodsUg"       扩展名:""       realPath:" / tmp / phpVodsUg"       时间:2017-06-04 12:42:26       mTime:2017-06-04 12:42:26       cTime:2017-06-04 12:42:26       inode:17573243       大小:34215       烫发:0100600       拥有者:1000       组:1000       输入:" file"       可写的:真的       可读:真实       可执行文件:false       file:true       迪尔:假       链接:false     }   ]

请问如何通过它的名称获取通过Ajax中的FormData()对象发送的图像?

感谢您的帮助

2 个答案:

答案 0 :(得分:8)

你可以这样做。

improvement

查看文档以获取更多信息https://laravel.com/docs/5.4/requests#retrieving-uploaded-files

上传文件http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html

上提供的api方法

答案 1 :(得分:1)

下面的代码对我有用:

$("#your_form").submit(function(e){
    e.preventDefault();
    var form = $(this);
    var url = form.attr("action");
    var data = new FormData(form[0]);
    $.ajax({
        url: url,
        type: 'POST',
        data: data,
        cache: false,
        processData: false,
        contentType : false,
        success: function (data) {
            console.log(data);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR, textStatus, errorThrown);
        }
    });
}); 

我的问题是属性contentType。所以,我设置为假,它没问题!