关于文件上传,看这篇文章就够了!!!

57 阅读1分钟

上传进度百分比显示

上传total不依赖后端,他是浏览器根据待发送请求体大小(例如formdata中文件的字节数)在本地计算的;

下载进度百分比显示

axios

total由后端content-length决定;如果后端设置了,lengthComputable就为true;如果没设置,或者使用了transfer-encoding:chunked,浏览器就不知道total大小,lengthComputable为false;

当服务端做了响应压缩,很多框架会省略content-length,改用分块传输,这样lengthComputable可能为false;

fetch

上传中下载中取消功能

axios

fetch

文件上传三种方式

  • multipart/form-data
  • application/json
  • www-form-urlencoded

文件下载

服务器只要在响应头加入content-disposition attachment filename="xxx"即可触发浏览器下载功能;

这部分和前端无关;

FileReader

FileReader 是一个web暴露的接口,用于处理用户选好确定好的文件;

有几个方法,例如:readAsArrayBuffer、readAsDataURL、readAsText;还有几个事件例如 progress error load等。

有一个场景,读取图片本地预览:这不就用上了

File/Blob

File继承自Blob,创建File的三种方式:

  • New File
  • Input 上传
  • 拖拽事件有个 e.dataTransfer;e.dataTransfer.files 获取文件;

Blob

有5个实例方法

Blob.arrayBuffer();

Blob.bytes();

Blob.slice();

Blob.stream();

Blob.text();

从blob中提取数据方法有

fileReader

blob.text();

new Response(blob).text();

File

一种特定的blob

createObjectURL

是url接口的一个静态方法,创建一个用于表示参数中给出对象的URL字符串;

释放对象URL调用revokeObjectURL;

URL.createObjectURL(Object),Object一般是blob或者file对象,也可以是 MediaSource 对象

本地预览pdf的用法; 这不就用上了