激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - Js實現粘貼上傳圖片的原理及示例

Js實現粘貼上傳圖片的原理及示例

2021-12-08 15:31袁志蒙 JavaScript

這篇文章主要介紹了Js實現粘貼上傳圖片的原理及示例,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

我們或多或少都使用過各式各樣的富文本編輯器,其中有一個很方便功能,復制一張圖片然后粘貼進文本框,這張圖片就被上傳了,那么這個方便的功能是如何實現的呢?

原理分析:
復制=>粘貼=>上傳

在這個操作過程中,我們需要做的就是:監聽粘貼事件=>獲取剪貼板里的內容=>發請求上傳

需要明白的是:

我們只能上傳截圖工具截的圖片(qq截圖、微信截圖等),不能粘貼上傳系統里的圖片(從桌面上、硬盤里復制),因為他們是存在完全不同的地方。

知悉paste event這個事件:當進行粘貼(右鍵paste/ctrl+v)操作時,該動作將觸發名為'paste'的剪貼板事件,這個事件的觸發是在剪貼板里的數據插入到目標元素之前。如果目標元素(光標所在位置)是可編輯的元素(設置了contenteditable屬性的div。textarea并不行),粘貼動作將把剪貼板里的數據,以最合適的格式,插入到目標元素里;如果目標元素不可編輯,則不會插入數據,但依然觸發paste event。數據在粘貼的過程中是只讀的。

監聽了paste事件,也知道了表現形式,接下來就是如何獲取數據了:

chrome有特定的方法,利用clipboardData.items、getAsFile()、new FileReader()等api可以在paste回調函數里獲取到剪貼板里圖片的base64編碼字符串(無論是截圖粘貼的還是網頁圖片復制粘貼的),ie11,firefox沒有這樣的api,不過依然有辦法可以獲取,因為數據已經表現在img的src里了,對于截圖粘貼的,直接取img的src屬性值(base64),對于網頁粘貼的,則把地址傳給后臺,然后根據地址down下來,存在自己的服務器,最后把新地址返回來交給前端展示就ok了。為了保持一致性便于管理,統一將所有情況(截圖、網頁)中的img的src屬性替換為自己存儲的地址。

完整例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <title>Js實現粘貼上傳圖片</title>
    <script src="jquery.js"></script>
</head>
 
<body>
    復制粘貼上傳圖片:
    <div id="content_img" contentEditable="true" style="width:500px;height:500px;border:1px solid #000;"></div>
    <script>
        document.getElementById('content_img').addEventListener('paste', function(e) {
        if (!(e.clipboardData && e.clipboardData.items)) {
            return;
        }
        for (var i = 0, len = e.clipboardData.items.length; i < len; i++) {
            var item = e.clipboardData.items[i];
            if (item.kind === "string") {
                item.getAsString(function(str) {
                    console.log(str);
                    alert("請粘貼圖片上傳");
                })
                $("#content_img").html(""); 
            } else if (item.kind === "file") {
                var blob = item.getAsFile();
                console.log(blob);
                if (blob.size === 0) {
                    return;
                }
                var data = new FormData();
                data.append("image", blob);
                $.ajax({
                    url: "http://www.yzmcms.com/upload.php",
                    type: 'POST',
                    cache: false,
                    data: data,
                    processData: false,
                    contentType: false,
                    dataType: "json", 
                    success: function(result) {
                        console.log(result);
                        if (result.status) {
                            var html = "<img src=" + result.data + " width='100' height='100'>";
                            $("#content_img").append(html);
                        } else {
                            console.log(result.message)
                        }
                    }
                });
 
                //阻止默認行為即不讓剪貼板內容在div中顯示出來
                e.preventDefault();
            }
        }
    });
    </script>
</body>
 
</html>

以上就是Js實現粘貼上傳圖片的原理及示例的詳細內容,更多關于JS 粘貼上傳圖片的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.yzmcms.com/js/218.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区久久久 | 国产三级影院 | 欧美大屁股精品毛片视频 | 久久精品黄| 一级片在线 | a网站在线| 午夜亚洲影院 | 欧美成人一区二区三区电影 | 精品少妇v888av| 亚洲人成电影在线 | 一级片国语 | 欧美黄色一级带 | 999久久久| 在线播放一区二区三区 | 国产九色91 | 亚洲国产资源 | 久久撸视频 | 日韩av片网站 | 色婷婷久久久久久 | 免费黄色小视频网站 | 在线亚洲免费视频 | 色淫视频 | 国产一区二区视频精品 | 五月天堂av91久久久 | www.91sese | 久久免费视频8 | 国产精品亚洲欧美一级在线 | 片在线观看 | 特级a欧美做爰片毛片 | 国产精品久久久久久久久岛 | 伊人99re| 美女扒开胸罩给男生看视频 | 偿还电影免费看 | 日本一区二区不卡高清 | 国产91九色在线播放 | 国产精品一区自拍 | 欧美精品免费一区二区三区 | 久久要| 农村寡妇偷毛片一级 | 中文字幕在线看第二 | 日韩一级片免费 |