【JQ】實現前端文件上傳


FormData

FormData是XMLHttpRequest Level 2 新增的一個接口。

使用FormData可以實現各種文件上傳。

 

使用

// 創建FormData的實例
var formdata = new FormData();

// 用append()為實例添加鍵和值
formdata.append(鍵名, 鍵值);

 

注意

使用jq的$.ajax()方法來進行文件上傳時,需要設置contentType和processData兩個參數。

參數 類型 說明
contentType String

當發送信息至服務器時,內容編碼類型默認為“application/x-www-form-urlencoded”。

該默認值適合大多數應用場合。

processData Boolean

默認為true。

默認情況下,發送的數據將被轉換為對象(從技術角度來講並非字符串)以配合默認內容類型“application/x-www-form-urlencoded”。

如果要發送DOM樹信息或者其他不希望轉換的信息,請設置為false。

從上面兩個參數的說明可以看出,ajax發送數據的時候內容編碼類型是“application/x-www-form-urlencoded”,

而我們上傳的文件可能是其他類型,所以上傳的時候不設置內容類型,故 contentType: false,

不對數據做處理,故 processData: false 。

 

實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>jq實現前端文件上傳</title>
</head>
<body>
    <input id="file" type="file">
    <button id="btn">上傳</button>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
    $('#btn').click(function() {
        var formdata = new FormData();
        formdata.append("file", $('#file')[0].files[0]);
        $.ajax({
            type: "POST",
            url: "你要將文件上傳到的地址",
            data: formdata,
            contentType: false, // 不設置內容類型
            processData: false, // 不處理數據
            dataType: "json",
            success: function(data) {
                
                // 請求成功后要執行的代碼

            },
            error: function(data) {
                
                // 請求失敗后要執行的代碼

            }
        });
    });
    </script>
</body>
</html>

 

觀察

console.log($('#file')[0]);
console.log($('#file')[0].files[0]);

從上面的打印結果可以看到我們傳的文件類型是“application/octet-stream”。

 

請求時的參數:

 

請求后的結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM