vue实现粘贴上传图片

<template>

    <el-input v-model="data.pastData" @paste="pastPic"
        @input="data.pastData = ''" placeholder="粘贴图片" ></el-input>

</template>


<script setup>
import { reactive } from "vue"
// 整个页面的数据
let data= reactive({
    pastData: '',
});



// 上传图片
const uploadPaste = (file, url, cb, errCb) => {
    let token = localStorage.getItem("token");
    const xhr = new XMLHttpRequest();
    const formData = new FormData();
    formData.append('file', file); // 假设后端接收的字段名为'image'  
    // 设置请求类型、URL和异步标志  
    xhr.open('POST', url, true);
    // 设置请求头(通常FormData请求不需要手动设置Content-Type)  
    // xhr.setRequestHeader('Content-Type', 'multipart/form-data'); // 通常不需要,因为FormData会自动设置  
    // 定义请求完成时的回调函数  
    xhr.onload = function () {
        if (xhr.status === 200) {
            // 请求成功  
            const responseData = JSON.parse(xhr.responseText);
            cb(responseData);
        } else {
            // 请求失败  
            console.error('Error:', xhr.statusText);
            errCb();
        }
    };

    // 定义请求出错时的回调函数  
    xhr.onerror = function () {
        console.error('Network Error');
        errCb()
    };
    xhr.setRequestHeader("token", `${token}`); // 设置 token
    // 发送请求  
    xhr.send(formData);
}
// 粘贴识别图片
const pastPic = async (e) => {
    let items = (e.clipboardData || e.originalEvent.clipboardData).items;
    for (var i = 0; i < items.length; i++) {
        if (items[i].type.indexOf('image') !== -1) {
            //只过滤出粘贴的图片
            formList.loading = true;
            try {
                var blob = items[i].getAsFile();
                //调用接口
                uploadPaste(blob, 'http://xxxxx/upload', (res) => {
                    //接口返回成功
                    console.log(res);
                }, () => {
                    //接口返回失败
                    // formList.loading = false;
                    console.log('error');
                });
            } catch (error) {
                console.log(error);
                
            }
        }
    }
}


</script>
<style scoped >
</style>

Vue实现图片粘贴功能可以使用Clipboard API和FileReader API来实现。下面是一个简单的示例代码: 1. 在Vue组件中添加一个input元素用于粘贴图片: ```html <template> <div> <input type="file" ref="fileInput" style="display: none" @change="handleFileChange"> </div> </template> ``` 2. 在Vue组件的methods中定义处理文件变化的方法: ```javascript methods: { handleFileChange(e) { const file = e.target.files[0]; this.readFile(file); }, readFile(file) { const reader = new FileReader(); reader.onload = (e) => { const dataURL = e.target.result; // 在这里可以对dataURL进行处理或上传操作 }; reader.readAsDataURL(file); } } ``` 3. 在Vue组件的mounted生命周期钩子中添加监听粘贴事件的代码: ```javascript mounted() { document.addEventListener('paste', this.handlePaste); }, beforeDestroy() { document.removeEventListener('paste', this.handlePaste); }, methods: { handlePaste(e) { const items = e.clipboardData.items; for (let i = 0; i < items.length; i++) { if (items[i].type.indexOf('image') !== -1) { const file = items[i].getAsFile(); this.readFile(file); } } }, // ... } ``` 在上述代码中,我们通过监听`paste`事件来获取粘贴的内容,然后判断是否为图片类型,如果是则将其转换为文件对象,并调用`readFile`方法进行处理。 请注意,由于涉及到文件读取和上传等操作,你可能还需要进一步处理和调整代码以适应你的具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值