上传进度百分比显示
上传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的用法; 这不就用上了