在新版 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>
FilelastModified: 1646398643613lastModifiedDate: Fri Mar 04 2022 20:57:23 GMT+0800 (中国标准时间) {}name: "world6.jpg"size: 1179107type: "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()//回调 readAsDataURLreader.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
