使用json上传laravel文件

时间:2015-06-16 07:02:02

标签: jquery ajax json laravel laravel-5

我正在使用laravel 5.我已经使用以下代码将json发布到我的控制器。但我无法通过这种方式上传文件。

e.preventDefault();
$.ajax({
    type: 'POST',
    cache: false,
    dataType: 'JSON',
    url: 'tasks',
    data: $('#my_form').serialize(),
    success: function(data) {
        console.log(data);
    },
});

我有以下html代码来上传文件。

<input type="text" name="name" value="" />
<input type="text" name="name" value="" />
<input type="file" class="form-control" name="documents[]" multiple>

如何在laravel中使用json发送文件?我做了很多搜索,但我无法得到适当的解决方案

2 个答案:

答案 0 :(得分:1)

将此作为您的代码:

e.preventDefault();
var mydata = new FormData($('#my_form')[0]);
$.ajax({
    type: 'POST',
    cache: false,
    dataType: 'JSON',
    url: 'tasks',
    data: mydata,
    processData: false,
    contentType: flase
    success: function(data) {
        console.log(data);
    },
});

请注意,这不适用于某些旧版浏览器(如IE 9或更早版本),因此您可能需要禁用此功能以防止错误日志过载,我会向用户提供自定义消息,说明旧版浏览器禁用该功能使用

if(typeof FormData !== 'undefined'){
   var formdata = new FormData($("#documentform")[0]);
}
else{
   $("#errormsg").val("upload feature is disabled in this browser version");
   return false;
}

答案 1 :(得分:0)

标准的jquery ajax不直接支持文件的发送。要做到这一点,您基本上也需要使用FormData对象而不是标准的js来进行post参数集合。

您还需要在ajax选项中禁用2个参数:

processData: false,
contentType: false,

防止jquery干扰FormData对象。

此处有更多信息:https://stackoverflow.com/a/8244082/4734683