// FileReader 实例const reader = new FileReader();fileUploader.addEventListener('change', (event) => { const files = event.target.files; const file = files[0]; reader.readAsDataURL(file); reader.addEventListener('load', (event) => { const img = document.createElement('img'); imageGrid.AppendChild(img); img.src = event.target.result; img.alt = file.name; });});如果大家看到这里 , 有点激动 , 想手贱一下 , 可以 CodePen 玩玩 , 地址:https://codepen.io/atapas/pen/zYBvdjZ
6.验证文件大小如果用户上传图片过大 , 为了不让服务器有压力 , 我们需要限制图片的大小 , 下面是允许用户上传小于 1M 的图片 , 如果大于 1M 将上传失败 。
fileUploader.addEventListener('change', (event) => { // Read the file size const file = event.target.files[0]; const size = file.size; let msg = ''; // 检查文件大小是否大于1MB if (size > 1024 * 1024) { msg = `<span style="color:red;">The allowed file size is 1MB. The file you are trying to upload is of ${returnFileSize(size)}</span>`; } else { msg = `<span style="color:green;"> A ${returnFileSize(size)} file has been uploaded successfully. </span>`; } feedback.innerHTML = msg;});如果大家看到这里 , 有点激动 , 想手贱一下 , 可以 CodePen 玩玩 , 地址:https://codepen.io/atapas/pen/pobjMKv
7. 显示文件上传进度更好的用户体验是让用户知道文件上传进度 , 前面我们用过了FileReader以及读取和加载文件的事件 。
const reader = new FileReader();FileReader还有一个progress 事件 , 表示当前上传进度 , 配合HTML5的progress标签 , 我们来模拟一下文件的上传进度 。
reader.addEventListener('progress', (event) => { if (event.loaded && event.total) { // 计算完成百分比 const percent = (event.loaded / event.total) * 100; // 将值绑定到 `progress`标签 progress.value = percent; }});

文章插图
如果大家看到这里 , 有点激动 , 想手贱一下 , 可以 CodePen 玩玩 , 地址:https://codepen.io/atapas/pen/eYzpwYj
8. 怎么上传目录上传?我们可以上传整个目录吗?嗯 , 这是可能的 , 但有一些限制 。有一个叫做webkitdirectory的非标准属性(目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传) , 它允许我们上传整个目录 。
目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传 , 具体可以看下百度云盘的网页版的上传按钮 , 在火狐下就支持按照文件进行上传 , 而在谷歌和Edge下 , 就会给用户提供一个下拉 , 让用户选择是根据文件进行上传还是根据文件夹进行上传 。
<input type="file" id="file-uploader" webkitdirectory />用户必须需要确认才能上传目录
文章插图
用户单击“上传”按钮后 , 就会进行上传 。这里要注意的重要一点 。FileList数组将以平面结构的形式包含有关上载目录中所有文件的信息 。对于每个File对象 , webkitRelativePath属性表示目录路径 。
例如 , 上传一个主目录及其下的其他文件夹和文件:

文章插图
现在 , File 对象将将webkitRelativePath填充为:
推荐阅读
- web应用防火墙是做什么的?与传统网络设备的区别
- Websocket技术选型参考
- 绿茶对眼睛有好处,4种花茶对付眼睛干涩
- 宝宝在床上摔下来
- 哺乳期腰扭伤能用跌打药膏吗
- 电吹风对孕妇有影响吗
- 信用卡和网贷哪个严重?
- 绿茶对人体七大作用,夏季炎热喝绿茶可消酷暑
- 童装品牌哪个好
- 自定义注解!绝对是程序员装X的利器
