FormData添加文件不起作用

时间:2017-09-10 12:09:01

标签: javascript php jquery multipartform-data form-data

我有表格:

<form enctype="multipart/form-data" action="" method="post"  id="sendInvoiceForm">
    <input type="text" value="Some text">
    <input name="file[]" type="file"  multiple/>
    <input type="button" id="upload" value="Upload File" />
</form>

我的js:

$('#upload').click(function(e) {
            e.preventDefault();
            var formData = new FormData();
            formData.append('files',$("#sendInvoiceForm")[0]);
            $.ajax({
                url: 'upload.php',
                type: 'POST',
                xhr: function() {
                    var myXhr = $.ajaxSettings.xhr();
                    return myXhr;
                },
                success: function (data) {
                },
                data: formData,
                cache: false,
                contentType: false,
                processData: false
            });
            return false;
        });

当我尝试在php中获取我的'文件'时,我只得到 [object HTMLFormElement] 我怎样才能在php上获取我的文件?

但是如果我将formData创建为:var formData = new FormData($("#sendInvoiceForm")[0]); 我可以在_FILES中找到我的文件,但我需要为这个数组命名。

我该如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:1)

问题是因为您将form DOM元素附加到FormData,而不是文件数据。相反,您应该访问该对象的files数组:

formData.append('files', $('#sendInvoiceForm input[type="file"]')[0].files[0]);

由于可以选择多个文件,因此您需要循环访问它们:

$('#sendInvoiceForm input[type="file"]')[0].files.forEach(function(file) {
  formData.append('files', file, file.name);
});