Ajax:如何发送'空'文件,并在$_FILES中获取

Ajax: How to send 'empty' file using FormData and jQuery and get it in $_FILES

本文关键字:获取 并在 FILES 何发送 Ajax 文件      更新时间:2023-09-26

我有html表单,希望使用Ajax和jQuery:发送文件"myfile"

<form method="post" enctype="multipart/form-data">
    <input type="file" name="myfile" id="myfile">
</form>

我的javascript代码:

function getFile(fieldName){
    var itemValue = $('input[name="' + fieldName + '"]')[0].files[0];
    return itemValue;
}
function sendFile(){
    var formaData = new FormData();
    var itemName = 'myfile';
    var itemValue = getFile(itemName);
    formaData.append(itemName, itemValue);
    $.ajax({
        type: 'POST',
        data: formaData,
        processData: false,
        contentType: false,
    });
}

当选择文件时,一切正常。我在服务器上有$_FILES全局数组和通过Ajax获得的数据:

["myfile"]=>
    array(5) {
        ["name"]=>
        string(13) "file_name.jpg"
        ["type"]=>
        string(10) "image/jpeg"
        ["tmp_name"]=>
        string(14) "/tmp/phpefJlk3"
        ["error"]=>
        int(0)
        ["size"]=>
        int(344100)
    }

未选择文件时出现问题!当我没有选择任何文件并发送Ajax请求时,我有空的$_FILES,但我有字段"myfile"等于"undefined"的$_POST。但我需要$_FILES中的"myfile"字段,即使它是空的。我想要一些类似的东西:

["myfile"]=>
    array(5) {
        ["name"]=>
        string(0) ""
        ["type"]=>
        string(0) ""
        ["tmp_name"]=>
        string(0) ""
        ["error"]=>
        int(4)
        ["size"]=>
        int(0)
    }

如果我发送没有Ajax的空表单,上面就是$_FILES全局数组中的内容。如果我使用Ajax,我也想要相同的。有可能吗?

使用AJAX处理文件并没有那么简单。由于不同的客户端、庞大的文件和诸如此类的东西,它会遇到很多问题。(正如您在"simple"-Error here=中看到的那样)在您的情况下,没有选择任何文件,因此无需发送有关"没有给定文件"的信息。不要产生间接费用。也许你可以看看你的控制器。如果数据不同(AJAX POST或POST),那么创建两个PHP操作。一个AJAX处理程序和一个POST处理程序。在这种情况下,您可以处理不同的邮政数据。

这些信息将帮助您:如何异步上传文件?

你需要使用Uploadify或Valums这样的插件来实现这一点。只需阅读更多关于AJAX和Filepost的内容。

您可以检查$_FILES['myfile']['error']$_FILES['myfile']['size'],并返回您选择的数组作为结果。如果$_FILES['myfile']['error']等于零,则没有错误。您可以在php.net 上找到更多详细信息