在新版 HTML5 的标准中, 针对表单的文件上传, 浏览器提供了 File
和 FileReader
两个对象, 让我们可以获得到文件信息和读取文件.
File
当选择一个文件时,可以获得这个文件的描述对象
<input type="file" id="file" />
<script>
const file = document.getElementById('file')
file.addEventListener('change', (e) => {
console.dir(e.target.files[0])
})
</script>
File
lastModified: 1646398643613
lastModifiedDate: Fri Mar 04 2022 20:57:23 GMT+0800 (中国标准时间) {}
name: "world6.jpg"
size: 1179107
type: "image/jpeg"
webkitRelativePath: ""
[[Prototype]]: File
例子:
<form action="?" method="post" enctype="multipart/form-data">
<input type="file" onchange="return file()"> <!-- 当用户上传了的图片, 把图片设置成 body 的背景 -->
<input type="submit">
</form>
<script type="text/javascript">
function file() {
var f = document.querySelector('input[type=file]')
var body = document.querySelector('body')
// f.files[0] 图片信息 name,type,size ...
// FileReader 载入图像
reader = new FileReader()
//回调 readAsDataURL
reader.onload = function(e) {
body.style.backgroundImage = 'url(' + e.target.result + ')'
}
reader.readAsDataURL(f.files[0])
}
</script>
通过 FIle API
设置完成的背景图片, 我们通过 Chrome 开发者工具
查看, 可以看见, 图片的地址其实是我们本地的图片, 转换成一组 Base64
编码 | 参考 - Base64.
常用操作
获取文件后缀名
/**
* 获取文件后缀名
* @param {String} filename
*/
export function getExt(filename) {
if (typeof filename == 'string') {
return filename
.split('.')
.pop()
.toLowerCase()
} else {
throw new Error('filename must be a string type')
}
}
getExt("1.mp4") //->mp4