国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端文件上傳-javascript-ajax

luodongseu / 2890人閱讀

摘要:方案一表單上傳該方案優(yōu)點(diǎn)是支持好,缺點(diǎn)刷新頁面。提交原理就是上傳文件的重點(diǎn)。當(dāng)使用有文件上傳控件的表單時(shí),該值是必需的將空格轉(zhuǎn)換為符號(hào),但不編碼特殊字符方案二表單上傳優(yōu)化方案一缺點(diǎn)該方案的優(yōu)點(diǎn)也是支持好,缺點(diǎn)是不支持跨域。

書寫是為了更好的記憶。

方案一:form表單上傳

該方案優(yōu)點(diǎn)是支持好,缺點(diǎn)刷新頁面。

原理:enctype就是form上傳文件的重點(diǎn)。

描述
application/x-www-form-urlencoded 默認(rèn)。在發(fā)送前對(duì)所有字符進(jìn)行編碼(將空格轉(zhuǎn)換為 "+" 符號(hào),特殊字符轉(zhuǎn)換為 ASCII HEX 值)
multipart/form-data 不對(duì)字符編碼。當(dāng)使用有文件上傳控件的表單時(shí),該值是必需的
text/plain 將空格轉(zhuǎn)換為 "+" 符號(hào),但不編碼特殊字符
方案二:form表單上傳-優(yōu)化方案一缺點(diǎn)

該方案的優(yōu)點(diǎn)也是支持好,缺點(diǎn)是不支持跨域。

原理:通過target把響應(yīng)指向一個(gè)iframe頁面,之后拿到返回?cái)?shù)據(jù)。

描述
_blank 在新窗口/選項(xiàng)卡中打開
_self 默認(rèn), 在同一框架中打開
_parent 在父框架中打開。
_top 在整個(gè)窗口中打開
framename 在指定的 iframe 中打開
方案三:ajax上傳-優(yōu)化方案二缺點(diǎn)

該方案的缺點(diǎn)兼容問題-caniuse,兼容有兩個(gè)方向一是低版本ie不支持CORS跨域,一個(gè)就是input新加的Files。優(yōu)點(diǎn)就是異步,進(jìn)度條,判斷大小,處理,跨域。

var file = input.files[0];
var xhr = new XMLHttpRequest();
if (xhr.upload) {
    xhr.upload.addEventListener("progress", function(e) {
        console.log(file, e.loaded, e.total);
    }, false);
    // 文件上傳成功或是失敗
    xhr.onreadystatechange = function(e) {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                console.log("成功", xhr.responseText)
            } else {
                console.log("失敗")    
            }
        }
    }
    // 開始上傳
    xhr.open("POST", "url", true);
    xhr.send(file);
}
方案四:ajax-formData上傳-多字段多文件;

該方案基本同上,只不過使用了FormData,缺點(diǎn)就是formData的兼容

var formData = new FormData();
formData.append("file", input.files[0]);
xhr.send(formData);
其他方案:
1. SWFupload Flash上傳
2. jquery.form.js 其他插件上傳
需求一:拖拽上傳

使用drop事件,獲取e.dataTransfer

document.querySelector("body").addEventListener("drop", (e)=>{
    e.preventDefault();//不寫的話,就打開了
    console.log(e.dataTransfer.files[0])
});
需求二:截圖-粘貼-上傳

使用paste事件,獲取e.clipboardData

document.querySelector("body").addEventListener("paste", (e)=>{
    e.preventDefault();//不寫的話,就打開了
    console.log(e.clipboardData.files[0])
});
需求三:base64轉(zhuǎn)換上傳

場(chǎng)景發(fā)生在,一個(gè)和客戶端交互的情況下,客戶端選擇的圖片之后返給我了一個(gè)base64,讓我上傳這個(gè),而且接口那邊還不改,就要文件。代碼寫的比較啰嗦,其實(shí)也用不了這么多東西,當(dāng)時(shí)也是第一次接觸atobBlobArrayBuffer這些東西,就寫成這樣了。

  function(data){
    var _str = atob(data.base64Str)
    var _filePath = ((data.filePath.match(/.(jpg|jpeg|png|bmp)$/) || [])[1] || "png").toLowerCase();
    var _filePathHash = {
        jpg:"image/jpeg",jpeg:"image/jpeg",png: "image/png",bmp:"application/x-bmp",
    }
    var pre = "--------------------------1
Content-Disposition: form-data; name="file"; filename="1.png"
Content-Type: "+_filePathHash[_filePath]+"

";
    var end = "
--------------------------1--";
    var buffer = new ArrayBuffer(_str.length);
    var uint8 = new Uint8Array(buffer);
    for(var i in _str){
        uint8[i] = _str.charCodeAt(i);
    }
    var blob = new Blob([pre, uint8, end], {type: _filePathHash[_filePath]});
    var oReq = new XMLHttpRequest();
    oReq.open("POST", "url", true);
    oReq.setRequestHeader("Content-Type", "multipart/form-data; boundary=------------------------1")
    oReq.onreadystatechange=function(){if (oReq.readyState==4 && oReq.status==200){console.log(oReq.responseText); }
    oReq.send(blob);
需求四

上傳一般來說都是要寫樣式的,不能說光是默認(rèn)的input樣式就ok,但是呢,樣式又不是那么太好寫,我們?cè)趺崔k呢?

方案一

label標(biāo)簽的for去觸發(fā)input的單擊,這樣不就好了嗎?input的樣式不好寫,那我們把他藏起來,給label寫樣式。

方案二

input[type=file]左邊是一個(gè)input右邊是個(gè)按鈕,其實(shí)是按鈕的樣式不好改,那么我們外面包裹一層overlfow:hidden,然后給input設(shè)置成一個(gè)極大,讓他所有不一樣的東西,都超出去,這樣就是在能改動(dòng)的區(qū)域改動(dòng)了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94061.html

相關(guān)文章

  • AJAX 的進(jìn)階使用(Blob、ArrayBuffer、FormData、Document、JSON

    摘要:讓應(yīng)用程序擁有異步讀取存儲(chǔ)在用戶計(jì)算機(jī)上文件或原始數(shù)據(jù)緩沖區(qū)的能力,使用或?qū)ο笾付ㄒx取的文件或數(shù)據(jù)。對(duì)象用來表示通用的固定長(zhǎng)度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)。事實(shí)上,沒有名為的全局對(duì)象,也沒有一個(gè)名為的構(gòu)造函數(shù)。 Ajax 即 Asynchronous Javascript And XML (異步 JavaScript 和 XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。在無需重新加載整...

    wean 評(píng)論0 收藏0
  • 溫故js系列(12)-ajax&&優(yōu)缺點(diǎn)&&node后端

    摘要:接收響應(yīng)當(dāng)請(qǐng)求發(fā)送到服務(wù)器端,收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充對(duì)象的屬性。一般而已狀態(tài)代碼為作為成功的標(biāo)志。必要時(shí),可以將查詢字符串參數(shù)追加到的末尾,以便提交給服務(wù)器。后端實(shí)現(xiàn)可以自學(xué)一點(diǎn)后端知識(shí),便于學(xué)習(xí)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:Ajax JavaScript-Ajax&&no...

    LiangJ 評(píng)論0 收藏0
  • 關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(二) ----- File

    摘要:為了解救上面說到的問題是向提交的一個(gè)草案,旨在推出一套標(biāo)準(zhǔn)的,其基本功能是實(shí)現(xiàn)用對(duì)本地文件進(jìn)行操作。出于安全性的考慮,該只對(duì)本地文件提供有限的訪問。 系列文章 關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(零)關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(一) ----- XMLHttpRequest關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(二) ----- File關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(三) ----- For...

    scola666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<