cv战士福音,可以带走的浏览器上传文件的三种方案,直接落地。

我敢打五毛钱的赌。

前端工程化完善度越来越高,2022年前端大概会有30%的工作被更高级的工作代替。

以前花基础界面的,将不再存在。反之,复杂界面的工作将越来越重。

算法逻辑,底层架构经验,才是新时代不落伍的保证。

由于安全考虑,浏览器只允许用户在进行三个操作时,触发上传本地文件:

通过 input type="file" 选择本地文件

通过拖拽的方式把文件拖过来

在编辑框里面复制粘贴

利用input上传文件第一种是最常用的手段,通常会自定义一个按钮,然后在用户点击时触发被隐藏的input,因为type="file"的input不好改变样式。

代码语言:javascript代码运行次数:0运行复制但是我有更好的方法去触发,在代码中几乎没有用到过上面的写法。

标准答案是事件触发,直接在js里面完成相关事件,非常灵活。如果把多处配置,一点触发比作水桶腰(宽而臃肿),那么一处配置一处触发就像一个容易得到的婀娜多姿的美人。大多文章把这一段写的又长又臭,如果你觉得我够良心,给个赞吧。

代码语言:javascript代码运行次数:0运行复制function insertFile(callback) {

const input = document.createElement('input');

input.type = 'file';

// input.accept = '.rmf,.km,.txt,.md';

input.addEventListener('change', (event: any) => {

const file = event.target.files[0];

// file 解析: https://developer.mozilla.org/zh-CN/docs/Web/API/File

if (event.target.files[0].size > 10 * 1024 * 1024) {

message.error('文件不能大于10mb');

return;

}

const file_name = file.name;

const file_reader = new FileReader();

file_reader.onload = event => {

const str = event.target.result;

console.log('filePlugins insertFile 弹出窗口,触发上传 str', event, file_name);

callback(str)

};

file_reader.readAsDataURL(file);

});

input.click();

}

insertFile(function (str){

// TODO ..

})其执行结果如下:

其中accept 指定可以上传的文件

如果你要指定图片,input.accept = 'image/*'即可。

其他文件如下,可直接看accept api

代码语言:javascript代码运行次数:0运行复制const input = document.createElement('input');

input.accept = 'audio/*' // 声频

input.accept = 'video/*' // 视频

input.accept = 'image/*,.pdf'// 图片和pdf参考:

前端本地文件操作与上传