如何在 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 对象的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 无法获取 Nuxt 中 axios FormData 发送的数据
Vue-resource + FormData 文件上传与 Laravel 后端
使用 FormData Javascript 发送布尔值 - Vuejs + Laravel 应用程序
Vuex+Laravel:无法将带有 FormData 和 axios 的多个文件发送到服务器端。在服务器端始终为空。这是怎么回事?