别再用input file做上传组件了

最近写密码管理的小App,本来是打算的开发完以后,通过数据库直接导数据,既方便又快捷。

但是发现因为存在加密程序的缘故,直接导显然不现实。所以新加了一个导入的功能,又因为框架使用的AntDesign,用他那个上传限制比较多,所以自己简单封装一个。

普通上传

一般我们封装上传都是用<input type="file" />进行操作。

html 复制代码
<button onclick="targetFileUpload">上传</button>

<input type="file" id="fileInputId" oninput="upload" />

<script>
    function targetFileUpload() {
        document.getElementById('fileInputId').click();
    }

    function upload() {
        // 上传逻辑
    }
</script>

showOpenFilePicker上传

使用window.showOpenFilePicker方法触发上传操作个人感觉是更优的选择。

js 复制代码
const [fileHandle] = await window.showOpenFilePicker({
    types: [
        {
            description: '测试数据',
            accept: {
                'application/json': ['.json']
            }
        }
    ]
});
const file = await fileHandle.getFile();

优劣对比

兼容性

<input type="file">兼容性更好,几乎所有浏览器都支持这种传统的文件上传方式,包括旧版本的浏览器。

showOpenFilePicker的兼容性如下图所示:

用户体验

如果直接定义上传文件框,更推荐使用<input type="file">,使用CSS再调调样式即可。

但是如果是使用Button触发,或者拖拽触发,更推荐使用showOpenFilePicker

开发控制度

<input type="file">一般而言开发很难控制的颗粒度非常精细,尤其是对于文件的选择和读取权限方面。

showOpenFilePicker几乎能控制到文件选择的每一个步骤。

总结

  • 老旧浏览器选择<input type="file">
  • 新浏览器选择showOpenFilePicker
相关推荐
jiayong235 小时前
Vue2 与 Vue3 常见面试题精选 - 综合宝典
前端·vue.js·面试
We་ct5 小时前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
东东5165 小时前
OA自动化居家办公管理系统 ssm+vue
java·前端·vue.js·后端·毕业设计·毕设
周某人姓周5 小时前
DOM型XSS案例
前端·安全·web安全·网络安全·xss
程序员鱼皮5 小时前
前特斯拉 AI 总监:AI 编程最大的谎言,是 “提效”
前端·后端·ai·程序员·开发
pusheng20255 小时前
普晟传感2026年新春年会总结与分析
前端·javascript·html
谢尔登5 小时前
React19事件调度的设计思路
前端·javascript·react.js
Emma_Maria6 小时前
本地项目html和jquery,访问地址报跨域解决
前端·html·jquery
奋斗吧程序媛6 小时前
常用且好用的命令
前端·编辑器
2301_796512526 小时前
【精通篇】打造React Native鸿蒙跨平台开发高级复合组件库开发系列:Lazyload 懒加载(懒加载的图片)
前端·javascript·react native·react.js·ecmascript·harmonyos