簡體   English   中英

Ajax:如何使用FormData和jQuery發送“空”文件並在$ _FILES中獲取

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

我有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,但是我有$ _POST且字段“ myfile”等於“ undefined”。 但是我需要$ _FILES中的'myfile'字段,即使它為空。 我想要類似的東西:

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

如果我不使用Ajax發送空表單,則上面是$ _FILES globall數組中的內容。 如果我使用Ajax,我也希望如此。 有可能嗎?

您可以檢查$_FILES['myfile']['error']$_FILES['myfile']['size']並返回您選擇的數組作為結果。 如果$ _FILES ['myfile'] ['error']等於零,則沒有錯誤。 您可以在php.net上找到更多詳細信息

使用AJAX處理文件不是那么簡單。 由於不同的客戶端,龐大的文件以及所有這些東西,它帶來了很多問題。 (如您在“簡單”中看到的-這里錯誤=)。在您的情況下,未選擇文件,因此無需發送有關“未給定文件”的信息。 不要產生開銷。 也許您看看您的控制器。 如果數據不同(AJAXPOST或POST),則創建兩個PHP-Action。 一個AJAX處理程序和一個POST處理程序。 在這種情況下,您可以處理不同的后數據。

這些信息將為您提供幫助: 如何異步上傳文件?

您需要使用UploadifyValums之類的插件才能使該工作正常。 只需閱讀更多有關AJAX和Filepost的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM