如何在 Laravel 中读取 FormData 对象

Posted

技术标签:

【中文标题】如何在 Laravel 中读取 FormData 对象【英文标题】:how to read FormData object in Laravel 【发布时间】:2017-11-05 08:48:15 【问题描述】:

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

像这样:

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

form_data 在ajax 调用中作为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 -测试:假 -originalName:“work-fitness_00255959.png” -mimeType:“图像/png” -尺寸:34215 -错误:0 #hashName:空 路径:“/tmp” 文件名:“phpVodsUg” 基本名称:“phpVodsUg” 路径名:“/tmp/phpVodsUg” 延期: ”” 真实路径:“/tmp/phpVodsUg” 时间:2017-06-04 12:42:26 m时间:2017-06-04 12:42:26 c时间:2017-06-04 12:42:26 索引节点:17573243 尺寸:34215 烫发:0100600 拥有者:1000 组:1000 类型:“文件” 可写:真 可读:真 可执行:假 文件:真 目录:假 链接:假 ]

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

感谢您的帮助

【问题讨论】:

【参考方案1】:

你可以这样做。

// get the `UploadedFile` object
$file = $request->file('file_name');
$file = $request->file_name;

// get the original file name
$filename = $request->file('file_name')->getClientOriginalName();
$filename = $request->file_name->getClientOriginalName();

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

上传文件http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html可用的api方法

【讨论】:

【参考方案2】:

下面的代码对我有用:

$("#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。所以,我设置为false就ok了!

【讨论】:

以上是关于如何在 Laravel 中读取 FormData 对象的主要内容,如果未能解决你的问题,请参考以下文章

axios/laravel/formdata 发布请求为空

Laravel 无法获取 Nuxt 中 axios FormData 发送的数据

如何使用 FormData 发送文件数组?

Vue-resource + FormData 文件上传与 Laravel 后端

使用 FormData Javascript 发送布尔值 - Vuejs + Laravel 应用程序

Vuex+Laravel:无法将带有 FormData 和 axios 的多个文件发送到服务器端。在服务器端始终为空。这是怎么回事?