HTML5提供的文件API

HTML5提供的文件API

FileList对象与file对象

fileList对象表示用户选择的文件列表,每个文件都是一个file对象

通过multiple属性,file控件允许一次放置多个文件

<input type="file" id="file" multiple size="800" />
<button>文件信息</button>
<script>
  function fn() {
    console.log(document.querySelector("#file").files.length);
    let file;
    const dom = document.querySelector("#file");
    for (let i = 0; i < dom.files.length; i++) {
      file = dom.files[i];
      alert(file.name);
    }
  }
  document.querySelector("button").addEventListener("click", fn);
ArrayBuffer与ArrayBufferView对象

ArrayBuffer

ArrayBuffer对象代表一个存储固定长度的二进制数据的缓存区,不能直接对ArrayBuffer中的内容机行操作,必须通过ArrayBufferView对象来读写ArrayBuffer缓存区的内容

创建一个缓存区长度为32byte的ArrayBuffer对象

const buf=new ArrayBuffer(32)

ArrayBufferView

html5一般不直接使用ArrayBufferView,而实使用他的子类实例对象

const int32Array=new Int32Array(ArrayBuffer)
Blob对象

html5中新增了Blob对象,代表原始二进制数据(file对象也继承了Blob对象)

Blob对象两个属性:size:字节长度,type:Blob的MIME类型;

图像的类型一般都是 image/ 开头的,我们可以通过它来判断是不是图像文件

创建blob实例对象

const blob=new Blob([],type)

第一个参数为一个数组,可以放任意数量以下类型的对象,这些对象将依序追加到blob对象中

1》ArrayBuffer对象

2》ArrayBufferView对象

3》Blob对象

4》String

第二个参数为一个对象;可指定type的属性

  let blob = new Blob(["hello", "123"]);
  console.log(blob.size, blob.type); // 8 ''

利用blob和a标签下载

<input type="text" id="ipt" />
<input type="button" id="btn" value="下载input的内容" />
<script>
  const ipt = document.querySelector("#ipt");
  document.getElementById("btn").addEventListener("click", () => {
    const blob = new Blob([ipt.value], { type: "text/plain" });
    const a = document.createElement("a");
    url = window.URL.createObjectURL(blob);
    a.download = "testDown.txt";
    a.href = url;
    a.click();
    window.URL.revokeObjectURL(url);
  });
</script>

slice方法

  const b = new Blob(["hello", "别叫我达芬奇"]);
  const b1 = b.slice(0, 5, "text/plain");
  const b2 = b.slice(5);
  console.log(b1);  // size为5
  console.log(b2);  // size为18
FileReader对象

主要用来把文件读入内存

FileReader对象的5个方法

方法名参数说明
readAsBInaryStringBlob对象或(继承了Blob对象的)file对象将Blob对象或文件中的数据读取为二进制字符串
radAsTextBlob对象或file对象将Blob对象或文件中的数据读取为文本数据
readAsDataURLBlob对象或file对象将Blob对象或文件中的数据读取为DataURL
readAsArrayBufferBlob对象或file对象将Blob对象或文件中的数据读取为ArrayBuffer
abortnone中断读取

FileReader对象事件

事件触发时机
onabort数据读取中断时触发
onerror数据读取失败时触发
onloadstart数据读取开始
onprogress数据读取中
onload数据读取成功时触发
onloadend数据读取完成,无论成功或失败

应用:

以dataUrl形式读取

<input type="file" value="以dataUrl形式读取到页面" id="dataUrl" /><br />
<div id="resultBox"></div>
<script>
  const fileIpt = document.getElementById("dataUrl");
  function readAsDataUrl() {
    const file = fileIpt.files[0];
    // console.log(file);
    let reader = new FileReader();
    if (!/image\/\w+/.test(file.type)) {
      alert("请确保文件类型为图像类型");
      return false;
    }
    reader.readAsDataURL(file);
    reader.onload = function(e) {
      console.log(e);
      const result = document.getElementById("resultBox");
      result.innerHTML = `<img src="${this.result}" alt="">`;
    };
  }
  fileIput.addEventListener("change", readAsDataUrl);

二进制形式读取

<input type="file" value="以二进制形式读入页面" id="binaryIpt" /><br />
<div id="resultBox"></div>
<script>
  const binaryIpt = document.getElementById("binaryIpt");
  binaryIpt.addEventListener("change", readAsBinaryFn);
  function readAsBinaryFn() {
    console.log(666);
    const file = binaryIpt.files[0];
    const reader = new FileReader();
    reader.readAsBinaryString(file);
    reader.onload = function() {
      document.getElementById("resultBox").innerHTML = this.result;
    };
  }
</script>

以文本形式读取

<input type="file" value="以文本形式读入" id="text" />
<div id="resultBox"></div>
<script>
  const fileIput = document.getElementById("text");
  fileIput.addEventListener("change", readAsTextFn);
  function readAsTextFn() {
    const file = fileIput.files[0];
    const reader = new FileReader();
    reader.readAsText(file);
    reader.onload = function() {
      document.querySelector("#resultBox").innerHTML = this.result;
    };
  }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值