原理
- 手动用js创建一个type为file的DOM元素。
- 在读取到数据后,清空手动创建的DOM元素。返回得到的Promise类型的文件数据files。
const getFilesPromise = async () => {
let thePromise = new Promise((resolve, reject) => {
let theElement = document.createElement("input");
theElement.type = "file";
theElement.multiple = true;
theElement.onchange = async () => {
const theFiles = theElement.files;
theElement = null;
return resolve(theFiles);
};
theElement.click();
});
return thePromise;
};
const theFiles = await getFilesPromise();
const thisFiles = getFilesPromise();
thisFiles.then((res)=>{
})
说明
- 非侵入式是指想要用户上传一个数据,不必去改动DOM骨架。
- 由于用到了document,那么这些代码不能在非浏览器环境如node.js环境下使用。
- 由于该方法为异步方法,故而最好是在异步函数里使用。当然也可以在同步函数的最后一步里使用。
来源
- Promise
- promise在文件读取时使用的方法(promise的基本使用方法)
- input标签
- Document.createElement()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-07-01 在vue项目中使用scss语法的准备步骤