共计 2194 个字符,预计需要花费 6 分钟才能阅读完成。
前段时间写了一个 上传文件前预览的性能,用于 pc 端。
这次又要测试一下挪动端的兼容性,在客户端内应用。
正好整顿一下,先上测试地址:DEMO 地址,目前有这些性能。
- 动静设置 accept、capture、multiple、webkitdirectory
?accept=.png
的模式疾速还原场景- 上传前预览的性能,前端上传前预览文件 image、text、json、video、audio
input type=”file” 的属性
accept 设置上传的文件类型
属性其实是表明 服务器端可承受的文件类型 ,然而在前端这边体现就是会 过滤文件类型
accept – 设置形式
-
通配符。chrome 有个版本应用通配符会造成卡顿(最新版本已修复)
audio/*
(所有音频文件)video/*
(所有视频文件)image/*
(所有图片文件)
-
无效的 MIME 类型
image/png
image/jpeg
。image/jpg
是不会辨认的
-
文件扩展名
.png
.jpg
反对多种设置的形式 ,如果有多个类型能够 逗号 (,) 分隔,比方 image/png,.jpg
capture – 设置文件起源
次要用于挪动端,文件内容从 相册、前摄像头拍摄、后摄像头拍摄 。
依据 Android 组的共事说,他们收到是 Boolean 类型的,所以必定是不反对这么多功能。
capture – 设置计划
- user 前置
- environment 后置
- camera 相机
- camcorder 摄像机
- microphone 录音
- filesystem
multiple – 是否反对多选
设置上即为反对多选,然而 在微信中反对有问题
webkitdirectory
抉择目录上传,并不是一个规范的属性,chrome 还是能够体验一下的。
抉择文件的事件及应用
onchange 事件监听
onchange 事件中能够获取到抉择动作,抉择的文件在 files 中保留。
操作实现之后要记得清空,否则再次抉择雷同的文件不会触发 change 事件。
input.onchange = function(event){
event.target.files
// ...
this.value = ''
}
File 文件上能获取到的内容
- 文件名
- 文件大小
- 文件类型
- 门路(假门路,有的返回的是空的)
File 文件获取内容 & 其余信息
比如说 图片宽高、视频宽高、音频时长、exif 之类的信息是不会返回的。
这里咱们须要二次操作
- 比如说
URL.createObjectURL()
加载一下,而后加载,而后获取信息。 - 还能够
FileReader
读取成 arrayBuffer,而后剖析字节,获取 exif 信息。
属性测试后果
因为有时效性,所以我做一下零碎和工夫的记录
测试工夫:2020 年 8 月 1 日 16:02:17
iOS:iPhone (6),12.4.5
Android:Honor 9i,LLD-AL20,9.1.0.146
accept | capture | multiple | webkitdirectory | iOS-vvMusic | Android-vvMusic | iOS-WeChat | Android-WeChat |
---|---|---|---|---|---|---|---|
× | × | × | × | 拍照或录像、照片图库、浏览 | 图库、联系人、音乐 | ||
.jpg,.png | × | × | × | 拍照或录像、照片图库、浏览 | 图库、联系人、音乐 | ||
× | true | × | × | 后置 | 图库、联系人、音乐 | ||
× | 空 | × | × | 后置 | 图库、联系人、音乐 | ||
× | user | × | × | 前置 | 图库、联系人、音乐 | ||
× | environment | × | × | 后置 | 图库、联系人、音乐 | ||
× | camera | × | × | 后置 | 图库、联系人、音乐 | ||
× | camcorder | × | × | 后置 | 图库、联系人、音乐 | ||
× | microphone | × | × | 后置 | 图库、联系人、音乐 | ||
× | filesystem | × | × | 后置 | 图库、联系人、音乐 | ||
image/* | × | × | × | 拍照、照片图库、浏览 | 相册抉择照片 | ||
image/* | true | × | × | 后置拍照 | 后置拍照 | ||
image/* | 空 | × | × | 后置拍照 | 后置拍照 | ||
image/* | user | × | × | 后置拍照 | 前置拍照 | ||
image/* | environment | × | × | 后置拍照 | 后置拍照 | ||
image/* | camera | × | × | 后置拍照 | 后置拍照 | ||
image/* | camcorder | × | × | 后置拍照 | 后置拍照 | ||
image/* | microphone | × | × | 后置拍照 | 后置拍照 | ||
image/* | filesystem | × | × | 后置拍照 | 后置拍照 | ||
video/* | × | × | × | 录像、照片图库、浏览 | 相册抉择视频 | ||
video/* | true | × | × | 后置录像 | 后置录像 | ||
video/* | 空 | × | × | 后置录像 | 后置录像 | ||
video/* | user | × | × | 前置录像 | 后置录像 | ||
video/* | environment | × | × | 后置录像 | 后置录像 | ||
video/* | camera | × | × | 后置录像 | 后置录像 | ||
video/* | camcorder | × | × | 后置录像 | 后置录像 | ||
video/* | microphone | × | × | 后置录像 | 后置录像 | ||
video/* | filesystem | × | × | 后置录像 | 后置录像 | ||
audio/* | × | × | × | 拍照或录像、照片图库、浏览 | 不反对 | ||
audio/* | true | × | × | 录音机 | 后置照片 | ||
audio/* | 空 | × | × | 录音机 | 后置照片 | ||
audio/* | user | × | × | 录音机 | 前置照片 | ||
audio/* | environment | × | × | 录音机 | 后置照片 | ||
audio/* | camera | × | × | 录音机 | 后置照片 | ||
audio/* | camcorder | × | × | 录音机 | 后置照片 | ||
audio/* | microphone | × | × | 录音机 | 后置照片 | ||
audio/* | filesystem | × | × | 录音机 | 后置照片 | ||
video/,audio/ | × | √ | × | 拍照或录像、照片图库、浏览(多选) | 图库、联系人、音乐(单选) | ||
× | × | × | × | ||||
微信公众号:前端 linong
欢送大家关注我的公众号。有疑难也能够加我的微信前端交换群。
正文完
发表至: javascript
2020-10-12