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

JS前端文件讀取FileReader操作方法總結(jié)

 更新時間:2024年08月07日 09:39:25   作者:yqdidy  
FileReader?包含了一套完整的事件模型,用于捕獲讀取文件時的狀態(tài),下面這篇文章主要給大家介紹了關(guān)于JS前端文件讀取FileReader操作方法的相關(guān)資料,需要的朋友可以參考下

FileReader

FileReader 是一個對象,允許 Web 應用程序異步讀取存儲在用戶計算機上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用 File 或 Blob 對象指定要讀取的文件或數(shù)據(jù)。

構(gòu)造函數(shù):

let reader = new FileReader(); // 沒有參數(shù)

主要方法

readAsArrayBuffer(blob)

將數(shù)據(jù)讀取為二進制格式的 ArrayBuffer。當讀取操作完成時,readyState 變成 DONE(已完成),并觸發(fā) loadend 事件,同時 result 屬性中將包含一個 ArrayBuffer 對象以表示所讀取文件的數(shù)據(jù)。

reader.readAsArrayBuffer(blob)

readAsText(blob, [encoding])

將數(shù)據(jù)讀取為給定編碼(默認為 utf-8 編碼)的文本字符串。

instanceOfFileReader.readAsText(blob[, encoding]);

readAsDataURL(blob)

讀取二進制數(shù)據(jù),并將其編碼為 base64 的 data url。

reader.readAsDataURL(blob);

讀取方法都是異步的,也就是說只有當執(zhí)行完成后才能夠查看到結(jié)果,如果直接查看是無結(jié)果的,并返回 undefined。必須要掛載 實例下的 onload 或 onloadend 的方法才能處理轉(zhuǎn)化后的結(jié)果

FileReader的三個屬性:

  • error: 返回讀取時的錯誤信息
  • readyState: 返回操作的當前狀態(tài)
  • result: 返回讀取文件的結(jié)果

讀取文件的示例:

參考 http://m.fzitv.net/javascript/3249569x8.htm

<input type="file" onchange="readFile(this)">

<script>
function readFile(input) {
  let file = input.files[0];

  let fileReader= new FileReader();

  fileReader.readAsText(file);
  // 或者 fileReader.readAsArrayBuffer(file)
  
  /**
   * 該方法在讀取時調(diào)用
   */
  fileReader.onloadstart = () => {
      console.log("開始讀取")
      console.log(fileReader.readyState)//調(diào)用函數(shù),但還沒有結(jié)束,返回1
  }
  /**
   * 該方法在讀取成功時調(diào)用
   */
  fileReader.onload = () => {
      console.log("讀取成功")
      console.log(fileReader.result)
      console.log(fileReader.readyState)//調(diào)用完成,返回2
  }
  /**
   * 該方法在讀取結(jié)束時調(diào)用
   */
  fileReader.onloadend = () => {
      console.log("讀取結(jié)束")
  }
  /**
   * 讀取過程中觸發(fā)
   */
  fileReader.onprogress = (e) => {
      console.log("讀取中")
      //獲取已經(jīng)加載的數(shù)據(jù)量
      console.log("loaded==>" + e.loaded)
  }
  /**
   * 該方法在調(diào)用abort函數(shù)時觸發(fā)
   */
  fileReader.onabort = () => {
      console.log("操作終止")
  }
  //當讀取出現(xiàn)失敗時觸發(fā)
  fileReader.onerror = () => {
      console.log("出現(xiàn)錯誤")
      console.log(fileReader.error)
  }
}
</script>

read 方法的選擇tips:

  • readAsArrayBuffer —— 用于二進制文件,執(zhí)行低級別的二進制操作。對于諸如切片(slicing)之類的高級別的操作,F(xiàn)ile 是繼承自 Blob 的,所以可以直接調(diào)用它們,而無需讀取。
  • readAsText —— 用于文本文件,當我們想要獲取字符串時。
  • readAsDataURL —— 用于在 src 中使用此數(shù)據(jù),并將其用于img 或其他標簽時。

    還有一種用于此的讀取文件的替代方案:URL.createObjectURL(file)。

示例:根據(jù)用戶傳入的圖片文件,來生成一個對應的臨時url,并將臨時url作為src傳給img標簽

<input type="file" id="file">
<img  id="img">

let file = document.getElementById("file")
let img= document.getElementById("img")
file.addEventListener("change", (e) => {
    let fileList=e.target.files
    //先獲取一份文件
    //這里獲取的才是File對象
    let file = fileList[0]
    //因為file也是Blob對象,所以直接傳入即可
    img.src=URL.createObjectURL(file)
})

主要事件

讀取過程中,有以下事件:

  • loadstart —— 開始加載。
  • progress —— 在讀取過程中出現(xiàn),當FileReader讀取數(shù)據(jù)時,進度事件會定期觸發(fā)。
  • load —— 讀取完成時觸發(fā),沒有 error。
  • abort —— 在中止讀取時會觸發(fā) abort 事件:例如程序調(diào)用 abort()。。
  • error —— 出現(xiàn) error時觸發(fā)。
  • loadend —— 讀取完成,無論成功還是失敗。

讀取完成后,可以通過以下方式訪問讀取結(jié)果:

  • reader.result 是結(jié)果(如果成功)
  • reader.error 是 error(如果失?。?/li>

檢測瀏覽器對 FileReader 的支持:

if(window.FileReader) {
  var fr = new FileReader();
  // add your code here
}else {
  alert("Not supported by your browser!");
}

React + antd Upload 組件示例

場景: 表單文件上傳,讀取后以base64格式與表單一起傳給后端。

<Upload
  maxCount={1}
  accept=".jpg,.jpeg,.png"
  beforeUpload={(file) => {
    console.log('文件類型', file.type, file);
    // 限制文件類型
    const allowTypes = [
      'image/png',
      'image/jpeg',
      'image/jpg',
    ];
    const isAllowType = allowTypes.includes(file.type);
		// 校驗文件大小和類型
    if (!isAllowType || file.size / 1024 / 1024 > 4) {
      message.error('文件格式大小錯誤');
      return Upload.LIST_IGNORE;
    }
    const reader = new FileReader();
    //將上傳的文件讀取成base64
    reader.readAsDataURL(file);
    reader.onloadend = function () {
    	console.log('文件Base64內(nèi)容',reader.result, file);
    };
    // 阻止上傳,為了最后和表單一起提交
    return false;
  }}
>
  <Button icon={<UploadOutlined />} type="primary">
    文件上傳
  </Button>
</Upload>

總結(jié) 

到此這篇關(guān)于JS前端文件讀取FileReader操作方法總結(jié)的文章就介紹到這了,更多相關(guān)JS前端文件讀取FileReader內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript如何利用Promise控制并發(fā)請求個數(shù)

    JavaScript如何利用Promise控制并發(fā)請求個數(shù)

    大家都知道js是單線程,并不存在真正的并發(fā),但是由于JavaScript的Event Loop機制,使得異步函數(shù)調(diào)用有了“并發(fā)”這樣的假象。這篇文章主要給大家介紹了關(guān)于JavaScript如何利用Promise控制并發(fā)請求個數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • 微信小程序海報繪制示例講解

    微信小程序海報繪制示例講解

    這篇文章主要介紹了微信小程序海報繪制示例,海報分享功能在許多應用中應該是很常見的,因為它作為一種常用的應用推廣和拉新的方式,下面我們來通過案例學習如何繪制
    2024-05-05
  • innerHTML中標簽可以換行的方法匯總

    innerHTML中標簽可以換行的方法匯總

    本文給大家分享的是一個在javascript中使用innerhtml輸出的時候如何實現(xiàn)換行的小技巧,其實很簡單,在需要換行的地方加上\即可
    2015-08-08
  • 微信小程序?qū)崿F(xiàn)吸頂特效

    微信小程序?qū)崿F(xiàn)吸頂特效

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)吸頂特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 靜態(tài)頁面下用javascript操作ACCESS數(shù)據(jù)庫(讀增改刪)的代碼

    靜態(tài)頁面下用javascript操作ACCESS數(shù)據(jù)庫(讀增改刪)的代碼

    [紅色]靜態(tài)頁面下用javascript操作ACCESS數(shù)據(jù)庫(讀增改刪)的代碼...
    2007-05-05
  • JavaScript驗證知識整理

    JavaScript驗證知識整理

    本文主要介紹了JavaScript驗證的相關(guān)知識整理。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)通過js操作wxml的wxss屬性,結(jié)合實例形式分析了微信小程序使用js操作wxml的wxss屬性相關(guān)原理、實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2018-12-12
  • js獲取指定的cookie的具體實現(xiàn)

    js獲取指定的cookie的具體實現(xiàn)

    使用js獲取cookie或許你會,但是要獲取指定cookie,你會嗎?下面有個不錯的示例,大家可以參考下
    2014-02-02
  • javascript全局自定義鼠標右鍵菜單

    javascript全局自定義鼠標右鍵菜單

    這篇文章主要為大家詳細介紹了javascript全局自定義鼠標右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Js控制滑輪左右滑動實例

    Js控制滑輪左右滑動實例

    這篇文章主要介紹了Js控制滑輪左右滑動實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02

最新評論

江陵县| 延长县| 长葛市| 锡林浩特市| 内黄县| 漳浦县| 桐柏县| 定南县| 赣州市| 四平市| 广灵县| 辛集市| 延庆县| 永德县| 肇庆市| 东港市| 乳源| 陇南市| 宁晋县| 民勤县| 开鲁县| 泽普县| 宁陕县| 明光市| 白河县| 安图县| 富平县| 建湖县| 余庆县| 武乡县| 延津县| 白玉县| 专栏| 韶关市| 安岳县| 同仁县| 禹城市| 阳山县| 安龙县| 资阳市| 堆龙德庆县|