我正在开发一个聊天应用程序的react JS,我想要一个图像被上传,如果我复制粘贴在Chatbox上的图像.我怎么触发这个?

我基本上需要的是:

  • 执行粘贴操作时将触发的事件.
  • 一种将图像从剪贴板上传到文件类型输入元素的方法.

推荐答案

您需要在paste事件上添加一个事件监听器,并从剪贴板中获取items并判断其类型是否为图像.

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>HTML DOM - Paste an image from the clipboard</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="/css/demo.css" />
        <link rel="preconnect" href="https://fonts.gstatic.com" />
        <link
            rel="stylesheet"
            href="https://fonts.googleapis.com/css2?family=Inter&family=Source+Code+Pro&display=swap"
        />
        <style>
            .container {
                /* Center the content */
                align-items: center;
                display: flex;
                justify-content: center;

                /* Misc */
                height: 32rem;
                padding: 1rem 0;
            }
            .key {
                background-color: #f7fafc;
                border: 1px solid #cbd5e0;
                border-radius: 0.25rem;
                padding: 0.25rem;
            }
            .preview {
                align-items: center;
                border: 1px solid #cbd5e0;
                display: flex;
                justify-content: center;

                margin-top: 1rem;
                max-height: 16rem;
                max-width: 42rem;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div>
                <div><kbd class="key">Ctrl</kbd> + <kbd class="key">V</kbd> in this window.</div>
                <img class="preview" id="preview" />
                <input id="file_input" type="file" />
            </div>
        </div>
       
        <script>
            document.addEventListener('DOMContentLoaded', function () {
                document.addEventListener('paste', function (evt) {
                    const clipboardItems = evt.clipboardData.items;
                    const items = [].slice.call(clipboardItems).filter(function (item) {
                        // Filter the image items only
                        return item.type.indexOf('image') !== -1;
                    });
                    if (items.length === 0) {
                        return;
                    }

                    const item = items[0];
                    const blob = item.getAsFile();

                    const imageEle = document.getElementById('preview');
                    imageEle.src = URL.createObjectURL(blob);
                    let file = new File([blob], "file name",{type:"image/jpeg", lastModified:new Date().getTime()}, 'utf-8');
                    let container = new DataTransfer(); 
                    container.items.add(file);
                    document.querySelector('#file_input').files = container.files;
                });
            });
        </script>
    </body>
</html>

资源

  1. Pase an image from the clipboard
  2. Set file value from blob

Javascript相关问答推荐

如何将剧作家请求对象转换为字符串,因为它只提供promise ?

try 在addEventHandler内设置表单的文件输入.值=空

导入图像与内联包含它们NextJS

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

如何使用侧边滚动按钮具体滚动每4个格?

从mat—country—select获取整个Country数组

按下同意按钮与 puppeteer 师

Phaser 3 console. log()特定游戏角色的瓷砖属性

为什么我的列表直到下一次提交才更新值/onChange

如何从调整大小/zoom 的SVG路径定义新的d属性?""

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

可更改语言的搜索栏

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

在Java中寻找三次Bezier曲线上的点及其Angular

自定义确认组件未在vue.js的v菜单内打开

处理app.param()中的多个参数

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

使用createBrowserRoutVS BrowserRouter的Reaction路由

在ChartJS中使用spanGaps时,是否获取空值的坐标?