前端实现复制文件,Ctrl + V进行文件的上传 (简单,易懂,快速,可自行拓展,线上已投入使用)

系列文章目录

提示:本次的功能是完成一个 系统级别的复制粘贴操作。(给大家一个简单,易懂,可快速使用的方案。)



请添加图片描述

背景和功能

1.背景

提示:主要是介绍背景

  1. 当前业务中会频繁的接触:pdf,png 等文件资源
  2. 需要把这些文件通过第三方软件,例如:邮箱,微信(企业),飞书,这些软件都会对直接拖拽文件进行区域限制。
  3. 所以这个时候,通过复制文件到剪贴板,然后通过粘贴 Ctrl+V 实现文件流的上传就会显得非常的有必要!!

2.功能

提示:主要是介绍本次功能的流程和后续功能展望
1.主要还是我太懒了,还有就是现在是真的有一些忙。
2.每天睁👀就是上班,闭眼就是睡觉

  1. 首先需要解决 ==> 如何读取到剪贴板中的数据:
    大概有3种方法(这个可能要废弃了execCommand,最好做一下兼容性处理) 其他的方法自行百度,一大堆
  2. 这些方法都适用于哪些场景;1. 读取文本,2. 浏览器安全性,3. 读到文件流
  3. 如何获取文件流
  4. 如恶化对文件流进行转化 (其实这里是可以进行功能拓展: 1.文件分片 2.文件流配置,3.续传(不建议))
  5. 推送到什么位置
  6. 成功以后拿到什么结果

大体上是上面的几个步骤,如果你可以都成功解决,并且可以完成功能拓展。
那么恭喜你,可以把这个功能放到你的个人简历上了,面试的时候,直接把这一套流程讲给面试官听就完事了


提示:下面案例可供参考

一、Vue3代码,(初版例子)

1. 代码如下(附:详细注释)

// 监听粘贴事件 paste (全局注册)
document.addEventListener('paste', (event) => {
	// 获取对应的文件信息
    const items = event.clipboardData.items;
    // 拿到剪贴板中的内容(这里没使用forEach是有原因的,可以自己尝试一下)
    for (let i = 0; i < items.length; i++) {
        if (items[i].kind === 'file') {
            set(items[i])
            const file = items[i].getAsFile();
            console.log('File:', file);
            // 这里可以添加处理文件的逻辑,例如上传文件等
        }
    }
});


// 把事件提取出来,removeEvent 可以生效
const pasteFileUpload = (event) => {
    const filesItems = event.clipboardData.items

    for (let i = 0; i < filesItems.length; i++) {

        if(filesItems[i].kind === "file") {
            const file = filesItems[i].getAsFile()

        }
        
    }
    
}

// 这里是 注销 paste 事件
const handleClosed = () => {
    document.removeEventListener("paste", pasteFileUpload)
 
}
// 这里使用 watch 可以动态的监听你想要触发的条件是什么,方便更好的注册和移除。
watch(() => form.bookingType, (val) => {

    if(val === "") {
        document.addEventListener("paste", pasteFileUpload)
        
        return
    }
    document.removeEventListener("paste", pasteFileUpload)
    
})

总结(看一看吧)

提示:这里对文章进行总结:

主要的问题🙋:前提对这个功能的探索。其实目前的这个结果是最终尝试下来,可以正常使用的,在真正写功能的过程中,还会遇到:
1、为什么看不到数据🤣?
2、为什么会上传多次🤣?
3、使用什么进行文件上传🤣?
4、我应该把这个功能放在什么位置🤣?

我个人认为,最快的成长方式是:1、先明确自己的目标是正确的。 2、再往这个正确的目标上去努力,收获就是这条路上遇到的形形色色的问题和解决这些问题的方法。希望本文章可以帮助到大家💪💪💪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满脑子技术的前端工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值