weixin_54453273 2023-10-09 11:58 采纳率: 42.9%
浏览 9

如何获取剪贴板的图片

如何获取剪贴板的图片,以下代码,

<!DOCTYPE html>
<html>
<input type='button' name='zhantie' value='上传剪贴板中的图片' onclick='paste_pic();'>
<script>
    async function paste_pic() {                
        const items=await navigator.clipboard.read()
        for (var i=0; i<items.length; i++) {            
            if (items[i].types=='image/png') {                
                var imageFile=items[i].getAsFile();
                formData=new FormData ();                
                console.log (typeof formData);                
                if (formData.append ('image', imageFile)) {
                    console.log ('formdata append success!');
                    } else {
                        console.log ('formdata append failed!');
                    } 
                
                fetch ('upload_pic.php', {
                    method: 'POST',
                    body: formData
                 }).then(response=>console.log(response.status));
                }
                break;
            }
        }                
            
</script>
</html>

执行后出现错误说getAsFile不是一个函数:

img


于是我把getAsFile换成getType,代码如下:

<!DOCTYPE html>
<html>
<input type='button' name='zhantie' value='上传剪贴板中的图片' onclick='paste_pic();'>
<script>
    async function paste_pic() {                
        const items=await navigator.clipboard.read()
        for (var i=0; i<items.length; i++) {            
            if (items[i].types=='image/png') {                
                const imageFile=await items[i].getType("image/png");
                formData=new FormData ();                
                console.log (typeof formData);                
                if (formData.append ('image', imageFile)) {
                    console.log ('formdata append success!');
                    } else {
                        console.log ('formdata append failed!');
                    } 
                
                fetch ('upload_pic.php', {
                    method: 'POST',
                    body: formData
                 }).then(response=>console.log(response.status));
                }
                break;
            }
        }                
            
</script>
</html>

但是formData append不成功,如下图片所示:

img


如大家指点一下,多谢!

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-10 18:32
    关注

    引自强大而免费的微信小程序:皆我百晓生。


    在您的代码中,有几个问题需要解决:

    1. 您应该通过使用items[i].getType('image/png')来获取剪贴板中的图像数据,而不是通过items[i].types来检查类型。所以请将if条件替换为if (await items[i].getType('image/png'))

    2. 您创建的formData对象在每次循环中都是新的,因此之前添加的图片文件无法被保留。在paste_pic函数之外,使用var formData = new FormData();创建一个全局formData对象,然后在if条件中使用formData.append('image', imageFile);将文件添加到同一个formData对象。

    下面是经过修正的代码:

    <!DOCTYPE html>
    <html>
    <input type='button' name='zhantie' value='上传剪贴板中的图片' onclick='paste_pic();'>
    <script>
        var formData = new FormData();
    
        async function paste_pic() {
            const items=await navigator.clipboard.read();
            for (var i=0; i<items.length; i++) {
                if (await items[i].getType('image/png')) {
                    const imageFile=await items[i].getType("image/png");
                    console.log (typeof formData);
                    
                    formData.append ('image', imageFile);
    
                    fetch ('upload_pic.php', {
                        method: 'POST',
                        body: formData
                     }).then(response=>console.log(response.status));
    
                     break;
                }
            }
        }
                
    </script>
    </html>
    

    请注意,此代码假设您在upload_pic.php文件中正确地处理和保存图像数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月9日