Kailang Blog

文件上传2019-12-16Θ

文件介绍#

HTML File Input#

<input type='file' /> 是 HTML 原生支持的上传标签,同时还用属性:

  • multiple 支持一次上传多个文件
  • accept 限制上传文件的类型

获取上传文件信息#

  • fileInput.files 返回 Blob 对象数组

上传一个文件,这里使用 e.target.files[0] 拿到文件的内容,是 File Object, 文件 File 对象是 Blob 对象的子类。 可以在这里拿到文件 namesizetype 等信息。

file upload content

文件上传#

表单上传#

  • FormData()

将上传文件 appendFormData() 上并上传:

json 上传#

  • 监听文件上传: <input type='file' onChange={handleUpload} />
  • 获取上传文件 Blob: e.target.files
  • 转成 ArrayBuffer:通过 FileReader() 转成 ArrayBuffer 格式
  • 转成 Uint8Array
  • 转成阵列: 通过 Array.from()Uint8Array 格式数据转成阵列
  • 转成 JSON 格式:直接对 Uint8Array 执行 JSON.stringify() 会报错,要使用 Array.from() 后才可以

new Uint8Array() 转换出來是类阵列(Typed Array),可以通过 Array.from() 等方式转成真正的阵列。

图片预览#

FileReader 实现#

CreateObjectURL 实现#

大文件上传#

  • js-md5 支持直接将 ArrayBuffer 转成 md5

file upload multi

参考#