91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

前端的文件流flie是什么

發布時間:2020-11-02 10:18:23 來源:億速云 閱讀:387 作者:小新 欄目:web開發

這篇文章主要介紹前端的文件流flie是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

背景

領導提出一個問題,能不能不借助端的能力,實現本地分段讀取數據分段顯示。在沒有特別大的性能要求或者明確提出要求的情況下一般是一次性加載所有的數據并渲染,但是如果數據量大或者手機性能不好的話就會有別的問題了。

聽到這個的時候我是懵逼的,我啥也不知道,但是我同事實現了,寫了一個簡單的demo

前端的實現

假設只上傳一個文件

  1. 上傳文件目前前端最常見的是借助 input 的 type='file'(還有DataTransfer和HTMLCanvasElement可以實現,不介紹了)File

  2. 文件上傳成功之后就會返回一個FileList 對象(event.target.files[0]里面包含了所有與文本相關的信息,包括文本流,文本流我們可能肉眼不可見)

console.log('[FileList 對象]:',event.target.files[0])

  1. File接口是基于Blod,所以Blod有的屬性和方法,File也會有,比如slice=> 截取源 Blob 對象中指定范圍內的數據,text=>返回一個promise且包含blob所有內容的UTF-8格式(就是把我們blod轉化為我們可以讀懂的utf-8的格式)
  const fileDate = event.target.files[0]
  let text = await fileDate.slice(1, 10).text()
  console.log('[截取一段Blod對象]', fileDate.slice(1, 10));
  console.log('[Blod對象轉化為文本]', text);復制代碼
  1. 既然FileList 對象繼承于Blod對象,Blod對象對象又有slice和text方法。所以之前的那個需求就很好實現了

具體實現我還么有寫,思路到這里,日后補上

Blob

Blob/slice

File

Input/file

其他與流有關的API

我記得很早之前寫過不借助端的力量實現本地上傳預覽圖片音頻文件,那個時候就有提到過用過Blod對象,FileReader對象,還有createObjectURL,但是這一次恰好可以把這些都整合起來,一起說一下

var aBlob = new Blob( array, options );

參數,array 是一個由ArrayBuffer, ArrayBufferView, Blob, DOMString 等對象構成的 Array ,或者其他類似對象的混合體,它將會被放進 Blob。DOMStrings會被編碼為UTF-8。options不介紹了

Blob 對象表示一個不可變、原始數據的類文件對象。它的數據可以按文本或二進制的格式進行讀取,也可以轉換成 ReadableStream 來用于數據操作。

=> 這樣說的話就是一段我們認識文本可以通過new Blod可以轉化為Blod對象

問題Blod能夠做什么??

那就要看哪些對象可以用他做搞一些事情

下載網頁中某段文本或者日志

URL.createObjectURL() 她的參數就是Blod對象,用來創建一個url;可以結合a元素的download屬性,實現一段日志或者文本的下載

  <buttom onclick="onCopyHandle()">復制文本 </buttom>
 function onCopyHandle() { // 創建隱藏的可***鏈接
    let content = `
    name: sunseekers
    role: student
    houseName: shanghai
    url: https://github.com/sunseekers
    userAgent: ${navigator.userAgent}
    log:'這里是日志內容'
    `.trim();

    let filename = 'logFiles.md'
    const eleLink = document.createElement('a');
    eleLink.download = filename;
    eleLink.style.display = 'none';

    const blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob); // 字符內容轉變成blob地址

    document.body.appendChild(eleLink);
    eleLink.click(); // 觸發點擊
    document.body.removeChild(eleLink); // 然后移除

    Message.success('日志下載成功')
  };復制代碼

本地預覽上傳圖片

圖片可以用img標簽顯示也可以用canvas畫,看需求

<body>
  <p class="index">
    <input type="file" value="上傳文件">
    <img width="100" height="100"></img>
  </p>
</body>
<script>
  let inputEle = document.querySelector("input")
  let img = document.querySelector("img")

  inputEle.addEventListener('change', async function (event) {
    const fileDate = event.target.files[0]
    const fileReader = new FileReader()
    fileReader.readAsDataURL(fileDate)
    fileReader.onload = e => {
      img.src = e.target.result
    }

  })
</script>復制代碼

又學到一個新的API=>FileReader

FileReader

以上是前端的文件流flie是什么的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭通市| 内黄县| 阿克| 凤凰县| 玉门市| 武定县| 托里县| 曲松县| 贵德县| 甘洛县| 昌乐县| 临颍县| 繁昌县| 甘孜| 平邑县| 张家川| 达孜县| 宜丰县| 芒康县| 探索| 呼玛县| 平果县| 舟曲县| 游戏| 沭阳县| 松江区| 芜湖县| 阿荣旗| 抚松县| 吴桥县| 林西县| 杭锦后旗| 牙克石市| 福鼎市| 灌云县| 黄大仙区| 伽师县| 和平县| 霍山县| 交城县| 雷州市|