在vue3中通过ctrlCV将复制到粘贴板的文件直接上传到服务器

在使用豆包的时候,发现了一个好玩的功能即使用ctrlV将复制到粘贴板的文件直接上传到服务器

实现该功能的一个js事件为paste,该事件为用户将粘贴板复制到某个元素时触发。

<script>
        document.addEventListener('paste',(e)=> {
            console.log('触发了复制事件',e)
        })
</script>

获取粘贴板内容,并根据kind的类型可以判断复制的内容;

根据不同的类型可以根据getAsString() 和 getAsFile() 获取到文本信息和文件信息;

document.addEventListener('paste',(e)=> {
            event.preventDefault();
            console.log('触发了复制事件',e)
            const items = (e.clipboardData && e.clipboardData.items) || [];
            
            if(items.length > 0) {
                for (let i = 0; i < items.length; i++) {
                    console.log(items[i])
                }
            }
        })

获取文件:

console.log(items[i].getAsFile())

获取文本:

 items[i].getAsString(text=> {
     console.log(text)
})

Vue3完整代码:

<template>
    <div>
        <el-input v-model="input" style="width: 240px" placeholder="Please input" @paste="handlePaste" />
        <ul id="file-list">
            <li v-for="(file, index) in files" :key="index">
                {{ file.name }} - {{ file.type }}
            </li>
        </ul>
    </div>
</template>

<script setup>
import { ref } from 'vue';

const input = ref('');
const files = ref([]);

const handlePaste = (event) => {
    event.preventDefault();

    const items = (event.clipboardData && event.clipboardData.items) || [];
    
    if (items.length > 0) {
        let hasText = false;
        for (let i = 0; i < items.length; i++) {
            if (items[i].kind === 'string' && items[i].type.indexOf('text/plain') !== -1) {
                items[i].getAsString((text) => {
                    input.value += text;
                });
                hasText = true;
            } else if (items[i].kind === 'file') {
                const file = items[i].getAsFile();
                if (file) {
                    files.value.push(file);
                }
            }
        }

        if (!hasText) {
            console.log('Pasted content includes non-text items:', files.value);
        }
    }
};
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值