使用Ajax将FileList发送到PHP脚本

时间:2017-05-20 14:46:33

标签: javascript php jquery ajax

我尝试使用JS发送数组文件。我的代码:

var formData = new FormData();
formData.append("files", files);

$.ajax({
    url: './upload.php',
    method: 'post',
    data: formData,
    processData: false,
    contentType: false,
success: function(response) {
  alert('Files uploaded successfully. ');
  console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
   console.log(textStatus, errorThrown);
}

});

在此图像中,您可以看到来自php https://beta.ctrlv.cz/mUwx的响应(红色),还可以看到文件数组数据。我的PHP代码是:

<?php
    echo $_POST['files'][0]["name"];
?>

我想使用php脚本进行上传,但是ajax没有发送文件数组,这对于上传非常重要。

2 个答案:

答案 0 :(得分:0)

可能将contentType: false,更改为contentType: "multipart/form-data",

取自http://api.jquery.com/jquery.ajax/

  

contentType (默认:&#39; application / x-www-form-urlencoded;   charset = UTF-8&#39;)类型:布尔值或字符串向数据发送时   服务器,使用此内容类型。默认是   &#34;应用程序/ X WWW的窗体-urlencoded; charset = UTF-8&#34;,这很好   大多数情况下。如果您明确地将内容类型传递给$ .ajax(),那么   它总是被发送到服务器(即使没有数据发送)。作为   jQuery 1.6你可以传递false来告诉jQuery不要设置任何内容   类型标题。 注意:W3C XMLHttpRequest规范规定了这一点   charset总是UTF-8;指定另一个字符集不会强制   浏览器更改编码。 注意:对于跨域请求,   将内容类型设置为除以外的任何内容    application / x-www-form-urlencoded multipart / form-data text / plain   将触发浏览器发送预检OPTIONS请求   服务器

答案 1 :(得分:0)

这是我找到的答案:

var data = new FormData();
jQuery.each(jQuery('#file')[0].files, function(i, file) {
    data.append('file-'+i, file);
});

现在你有一个FormData对象,随时可以与XMLHttpRequest一起发送。

jQuery.ajax({
    url: 'php/upload.php',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

来源:https://stackoverflow.com/a/5976031/7282094

希望有所帮助。