摘要:方案一表單上傳該方案優(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),但不編碼特殊字符 |
該方案的優(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 中打開 |
該方案的缺點(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í)也是第一次接觸atob、Blob、ArrayBuffer這些東西,就寫成這樣了。
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
摘要:讓應(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ù)。在無需重新加載整...
摘要:接收響應(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...
摘要:為了解救上面說到的問題是向提交的一個(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...
閱讀 1160·2021-10-15 09:39
閱讀 3064·2021-09-10 10:50
閱讀 3460·2019-08-30 15:53
閱讀 1886·2019-08-30 15:52
閱讀 2573·2019-08-29 15:31
閱讀 1983·2019-08-26 13:43
閱讀 2602·2019-08-26 13:37
閱讀 1448·2019-08-23 18:31