最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript File API文件上傳預(yù)覽

 更新時(shí)間:2016年02月02日 11:55:06   作者:帶上餅干  
這篇文章主要為大家詳細(xì)介紹了JavaScript File API實(shí)現(xiàn)文件上傳預(yù)覽的詳細(xì)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

  對于基于瀏覽器的應(yīng)用而言,訪問本地文件都是一件頭疼的事情,通常我們能做的僅僅是使用<input type="file">標(biāo)簽來上傳文件。實(shí)現(xiàn)過程是:選取文件的時(shí)候value 屬性保存了用戶指定的文件的名稱,表單被提交的時(shí)候,瀏覽器會向服務(wù)器發(fā)送選中的文件的內(nèi)容而不僅僅是發(fā)送文件名。再獲取服務(wù)器返回的地址,然后做預(yù)覽。

  但是如果有一天我們要上傳一個(gè)圖片,傳了圖片后預(yù)覽想換另一張圖片,就又得先上傳到服務(wù)器再預(yù)覽。在網(wǎng)絡(luò)比較慢的情況下,這樣真的很折騰。

  所以我們某些時(shí)候需要先預(yù)覽再上傳到服務(wù)器,特別是一些有剪切功能的需求,例如新浪微博的頭像更換。但是目前能做的只能是借助插件開發(fā)或者使用flash,由于不同瀏覽器的技術(shù)實(shí)現(xiàn)不盡相同,為了讓程序能夠支持多瀏覽器,我們的程序就會變得十分復(fù)雜而難于維護(hù)。幸好現(xiàn)在有了File API。

  通過監(jiān)聽change事件我們可得知用戶選擇的文件,并且添加了一個(gè)files集合,集合中將包含file對象,每個(gè)file對象對應(yīng)著一個(gè)文件。并且都有以下只讀屬性name,size,type,lastModifiedDate.

<input type="file" name="file">為例,監(jiān)控onchange事打印它的file對象:

  

  由此我們可得知用戶選取的文件格式,文件名以及文件大小等等的一些信息。因此我們很容易就能為所選取的文件作驗(yàn)證判斷是否符合我們定的一些要求。

除此之外File API還提供了FileReader類型讀取文件中的數(shù)據(jù)。

FileReader類型實(shí)現(xiàn)的事一種異步文件讀取機(jī)制,類似于XMLHttpRequest,但是它讀的是文件系統(tǒng)而不是遠(yuǎn)程服務(wù)器。并且提供了幾種讀取方法:

  • readAsText(file,encoding):以純文本形式讀取文件,將讀取到的文本保存在result屬性中,第二個(gè)參數(shù)用于指定編碼類型,可選。
  • readAsDataURL(file):讀取文件以數(shù)據(jù)URL的形式保存在result屬性中。
  • readAsBinaryString(file):讀取文件并將一個(gè)字符串保存在result屬性中。
  • readAsArrayBuffer(file):讀取文件并將一個(gè)包含文件人容的ArrayBuffer保存在result屬性中

通過以上方法分別讀取同一張本地圖片,并且把保存在result屬性中的信息打印出來對比如下:

readAsText(file,encoding):

readAsDataURL(file):

  通過以上對比我們發(fā)現(xiàn)這些讀取文件的方法為靈活的處理文件數(shù)據(jù)提供了極大的方便。例如讀取圖像文件并且保存為數(shù)據(jù)url,可以做上傳前的預(yù)覽功能。

  由于讀取的過程是異步的,所以FileReader里面有幾個(gè)事件分別處理不同的情況:progress(是否讀取了新數(shù)據(jù))、erro(是否發(fā)生了錯(cuò)誤)、load(是否已經(jīng)讀完了整個(gè)文件)。

  由于種種原因無法讀取文件就會觸發(fā)error事件,觸發(fā)error事件的時(shí)會有一個(gè)屬性code(錯(cuò)誤碼)保存在FileReader的error屬性里面的一個(gè)對象中。

使用FileReader做上傳預(yù)覽的例子:

HTML:

<label class="item_label">上傳照片:
 <span style="width: 100px; height: 100px;border:1px solid #ccc; display:inline-block"><img src="#" id="uploadPreview" style="width: 100%; height: 100%;"></span>
 <input type="file" name="file" id="postFile" style="width:74px;">
 <span id="error_text" style="display: none;">提示</span>
</label>
  

JavaScript:

document.getElementById('postFile').onchange = function() {
 var val = this.value;
 var upLoadType = '.jpg,.gif,.bmp,.png';//['.jpg','.gif','.bmp','.png']; //可上傳的格式
 var fileExt = val.substr(val.lastIndexOf(".")).toLowerCase(); //從字符串中抽出最后一次出現(xiàn).之后的字符,并且轉(zhuǎn)換成小寫
 var result = upLoadType.indexOf(fileExt); //查找后綴名是否符合條件,如果符合返回>=0,如果不符合則返回負(fù)數(shù);
 _alertMsg = $('#error_text');
 var oFReader = new FileReader();
 if (this.files.length === 0) { return; }
 var oFile = this.files[0]; //如果只有一個(gè)文件則只需要訪問這個(gè)FileList對象中的第一個(gè)元素.
  
 if (oFile.size / 1024 < 100) {
  _alertMsg.html("<font style='color:blue'>√</font>").show()
 };
 if (result < 0) {
  _alertMsg.html("請輸入正確格式:" + upLoadType).show();
 } else{
  _alertMsg.html("<font style='color:blue'>√</font>").show();
 };
 
 oFReader.readAsDataURL(oFile); // 開始在后臺進(jìn)行讀取操作。當(dāng)圖像文件的所有內(nèi)容加載后,他們轉(zhuǎn)換成一個(gè)data:URL,傳遞到onload回調(diào)函數(shù)中
 oFReader.onload = function (oFREvent) { //當(dāng)讀取操作成功完成時(shí)調(diào)用.
  document.getElementById("uploadPreview").src = oFREvent.target.result;
 };
};

效果以及返回的圖片URL:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 微信小程序Flex布局用法深入淺出分析

    微信小程序Flex布局用法深入淺出分析

    這篇文章主要介紹了微信小程序Flex布局用法,深入淺出地羅列分析了flex彈性布局常見的屬性、功能及使用方法,需要的朋友可以參考下
    2019-04-04
  • js刪除指定位置超鏈接中含有百度與360的標(biāo)題

    js刪除指定位置超鏈接中含有百度與360的標(biāo)題

    最近需要將最近更新的部分內(nèi)容刪除,只要標(biāo)題中包括百度與360的都給刪除了,主要用到了jquery的each,需要的朋友可以參考下
    2021-01-01
  • JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場景詳解

    JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場景詳解

    這篇文章主要為大家介紹了JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • ES6基礎(chǔ)之默認(rèn)參數(shù)值

    ES6基礎(chǔ)之默認(rèn)參數(shù)值

    這篇文章主要介紹了ES6基礎(chǔ)之默認(rèn)參數(shù)值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • js獲取checkbox值的方法

    js獲取checkbox值的方法

    這篇文章主要介紹了js獲取checkbox值的方法,涉及js針對節(jié)點(diǎn)的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • 利用babel將es6語法轉(zhuǎn)es5的簡單示例

    利用babel將es6語法轉(zhuǎn)es5的簡單示例

    Babel是一個(gè)廣泛使用的轉(zhuǎn)碼器,babel可以將ES6代碼完美地轉(zhuǎn)換為ES5代碼,所以下面這篇文章就來給大家詳細(xì)介紹了關(guān)于利用babel將es6語法轉(zhuǎn)es5的相關(guān)資料,文章通過示例介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • JS實(shí)現(xiàn)深拷貝和淺拷貝的方式詳解

    JS實(shí)現(xiàn)深拷貝和淺拷貝的方式詳解

    深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對基本類型和引用類型的理解深度,本文主要給大家介紹了js實(shí)現(xiàn)深拷貝和淺拷貝的方式,需要的朋友可以參考下
    2022-05-05
  • 微信小程序?qū)崿F(xiàn)多選框功能的實(shí)例代碼

    微信小程序?qū)崿F(xiàn)多選框功能的實(shí)例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)多選框功能及效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 合并多個(gè)ArrayBuffer場景及方法示例

    合并多個(gè)ArrayBuffer場景及方法示例

    這篇文章主要為大家介紹了合并多個(gè)ArrayBuffer方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • javaScript 刪除字符串空格多種方法小結(jié)

    javaScript 刪除字符串空格多種方法小結(jié)

    在js中自一些字符串刪除空格的功能,本文章來介紹了字符串刪除功能加利用正則快速替換字符串中所有空格實(shí)現(xiàn)代碼
    2012-10-10

最新評論

永昌县| 嘉荫县| 威信县| 神农架林区| 张掖市| 巴马| 德令哈市| 宜川县| 普定县| 两当县| 彰化县| 丁青县| 肥乡县| 饶河县| 阆中市| 新巴尔虎右旗| 奉贤区| 古蔺县| 巍山| 嘉黎县| 鹤岗市| 句容市| 上栗县| 塔河县| 乌拉特前旗| 连州市| 临桂县| 阿克| 迭部县| 休宁县| 瓦房店市| 彩票| 拉萨市| 高邮市| 兴业县| 札达县| 瑞金市| 威信县| 渭源县| 徐汇区| 永嘉县|