别再用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
相关推荐
太阳伞下的阿呆2 小时前
本地环境vue与springboot联调
前端·vue.js·spring boot
阳光是sunny2 小时前
走进微前端(1)手写single-spa核心原理
前端·javascript·vue.js
烛阴3 小时前
Ceil -- 从平滑到阶梯
前端·webgl
90后的晨仔3 小时前
🔍Vue 模板引用(Template Refs)全解析:当你必须操作 DOM 时
前端·vue.js
90后的晨仔3 小时前
👂 Vue 侦听器(watch)详解:监听数据的变化
前端·vue.js
90后的晨仔4 小时前
深入浅出 Vue 的 computed:不仅仅是“计算属性”那么简单!
前端·vue.js
Nan_Shu_6144 小时前
学习:入门uniapp Vue3组合式API版本(17)
前端·vue.js·学习·uni-app
止观止5 小时前
Remix框架:高性能React全栈开发实战
前端·react.js·前端框架·remix
萌萌哒草头将军5 小时前
🚀🚀🚀 深入探索 Node.js v22.18.0 新特性;默认支持运行 ts 文件了!
前端·typescript·node.js
安心不心安5 小时前
React ahooks——副作用类hooks之useThrottleFn
前端·javascript·react.js