js实现图片粘贴上传到服务器并展示的实例
本文我们就和大家分享js实现图片粘贴上传到服务器并展示的实例,学完之后希望大家能掌握js图片粘贴上传到服务器并展示的方法。
最近看了一些有关于js实现图片粘贴上传的demo,实现如下: (这里只能检测到截图粘贴和图片右键复制之后粘贴)
demo1:
document.addEventListener('paste', function (event) { console.log(event) var isChrome = false; if ( event.clipboardData || event.originalEvent ) { //not for ie11 某些chrome版本使用的是event.originalEvent var clipboardData = (event.clipboardData || event.originalEvent.clipboardData); if ( clipboardData.items ) { // for chrome var items = clipboardData.items, len = items.length, blob = null; isChrome = true; //items.length比较有意思,初步判断是根据mime类型来的,即有几种mime类型,长度就是几(待验证) //如果粘贴纯文本,那么len=1,如果粘贴网页图片,len=2, items[0].type = 'text/plain', items[1].type = 'image/*' //如果使用截图工具粘贴图片,len=1, items[0].type = 'image/png' //如果粘贴纯文本+HTML,len=2, items[0].type = 'text/plain', items[1].type = 'text/html' // console.log('len:' + len); // console.log(items[0]); // console.log(items[1]); // console.log( 'items[0] kind:', items[0].kind ); // console.log( 'items[0] MIME type:', items[0].type ); // console.log( 'items[1] kind:', items[1].kind ); // console.log( 'items[1] MIME type:', items[1].type ); //阻止默认行为即不让剪贴板内容在p中显示出来 event.preventDefault(); //在items里找粘贴的image,据上面分析,需要循环 for (var i = 0; i < len; i++) { if (items[i].type.indexOf("image") !== -1) { //getAsFile() 此方法只是living standard firefox ie11 并不支持 blob = items[i].getAsFile(); uploadImgFromPaste(blob, 'paste', isChrome); } } /*if ( blob !== null ) { var reader = new FileReader(); reader.onload = function (event) { // event.target.result 即为图片的Base64编码字符串 var base64_str = event.target.result;//获得图片base64字符串 //可以在这里写上传逻辑 直接将base64编码的字符串上传(可以尝试传入blob对象,看看后台程序能否解析) uploadImgFromPaste(base64_str, 'paste', isChrome); } reader.readAsDataURL(blob);//传入blob对象,读取文件 }*/ } else { //for firefox setTimeout(function () { //设置setTimeout的原因是为了保证图片先插入到p里,然后去获取值 var imgList = document.querySelectorAll('#aaa img'), len = imgList.length, src_str = '', i; for ( i = 0; i < len; i ++ ) { if ( imgList[i].className !== 'my_img' ) { //如果是截图那么src_str就是base64 如果是复制的其他网页图片那么src_str就是此图片在别人服务器的地址 src_str = imgList[i].src; } } uploadImgFromPaste(src_str, 'paste', isChrome); }, 1); } } else { //for ie11 setTimeout(function () { var imgList = document.querySelectorAll('#aaa img'), len = imgList.length, src_str = '', i; for ( i = 0; i < len; i ++ ) { if ( imgList[i].className !== 'my_img' ) { src_str = imgList[i].src; } } uploadImgFromPaste(src_str, 'paste', isChrome); }, 1); } }) //调用图片上传接口,将file文件以formData形式上传 function uploadImgFromPaste (file, type, isChrome) { var formData = new FormData(); formData.append('files', file); formData.append('submission-type', type); var xhr = new XMLHttpRequest(); xhr.open('POST', '/upload_editor_photo3'); xhr.onload = function () { console.log(xhr.readyState); if ( xhr.readyState === 4 ) { if ( xhr.status === 200 ) { var data = JSON.parse(xhr.responseText), editor = document.getElementById('aaa'); if ( isChrome ) { var len=data.data.length; for ( var i = 0; i < len; i ++) { var img = document.createElement('img'); img.className = 'my_img'; img.src = data.data[i]; //设置上传完图片之后展示的图片 editor.appendChild(img); } } else { var imgList = document.querySelectorAll('#aaa img'), len = imgList.length, i; for ( i = 0; i < len; i ++) { if ( imgList[i].className !== 'my_img' ) { imgList[i].className = 'my_img'; imgList[i].src = data.data[i]; } } } } else { console.log( xhr.statusText ); } }; }; xhr.onerror = function (e) { console.log( xhr.statusText ); } xhr.send(formData); }
demo2:
// 处理粘贴事件 $("#aaa").on('paste', function(eventObj) { // 处理粘贴事件 var event = eventObj.originalEvent; var imageRe = new RegExp(/image\/.*/); var fileList = $.map(event.clipboardData.items, function (o) { if(!imageRe.test(o.type)){ return } var blob = o.getAsFile(); return blob; }); if(fileList.length <= 0){ return } upload(fileList); //阻止默认行为即不让剪贴板内容在p中显示出来 event.preventDefault(); }); function upload(fileList) { for(var i = 0, l = fileList.length; i < l; i++){ var fd = new FormData(); var f = fileList[i]; fd.append('files', f); var editor=document.getElementById("aaa"); $.ajax({ url:"/upload_editor_photo3", type: 'POST', dataType: 'json', data: fd, processData: false, contentType: false, xhrFields: { withCredentials: true }, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true' }, success: function(res){ var len=res.data.length; for ( var i = 0; i < len; i ++) { var img = document.createElement('img'); img.src = res.data[i]; //设置上传完图片之后展示的图片 editor.appendChild(img); } }, error: function(){ alert("上传图片错误"); } }); } }
注意:因为只支持右键复制图片,所以并不能一下复制两张图片,所有图片复制并粘贴上传待研究.
html:
<p id="aaa" contentEditable="true" style="height:800px;border:1px solid #ccc"></p>
接口返回数据格式:
{ // errno 即错误代码,0 表示没有错误。 // 如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理 errno: 0, // data 是一个数组,返回若干图片的线上地址 data: [ '图片1地址', '图片2地址', '……' ] }
相关推荐:
Atas ialah kandungan terperinci js实现图片粘贴上传到服务器并展示的实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Penyelesaian: 1. Semak tetapan eMule untuk memastikan anda telah memasukkan alamat pelayan dan nombor port yang betul 2. Semak sambungan rangkaian, pastikan komputer disambungkan ke Internet, dan tetapkan semula penghala; adalah dalam talian. Jika tetapan anda adalah Jika tiada masalah dengan sambungan rangkaian, anda perlu menyemak sama ada pelayan dalam talian 4. Kemas kini versi eMule, lawati tapak web rasmi eMule, dan muat turun versi terkini perisian eMule; 5. Dapatkan bantuan.

Apakah yang perlu saya lakukan jika pelayan RPC tidak tersedia dan tidak boleh diakses pada desktop Dalam beberapa tahun kebelakangan ini, komputer dan Internet telah menembusi setiap sudut kehidupan kita. Sebagai teknologi untuk pengkomputeran berpusat dan perkongsian sumber, Panggilan Prosedur Jauh (RPC) memainkan peranan penting dalam komunikasi rangkaian. Walau bagaimanapun, kadangkala kita mungkin menghadapi situasi di mana pelayan RPC tidak tersedia, mengakibatkan ketidakupayaan untuk memasuki desktop. Artikel ini akan menerangkan beberapa kemungkinan punca masalah ini dan memberikan penyelesaian. Pertama, kita perlu memahami mengapa pelayan RPC tidak tersedia. Pelayan RPC ialah a

Sebagai pengguna LINUX, kami selalunya perlu memasang pelbagai perisian dan pelayan pada CentOS Artikel ini akan memperkenalkan secara terperinci cara memasang fius dan menyediakan pelayan pada CentOS untuk membantu anda menyelesaikan operasi yang berkaitan dengan lancar. CentOS installation fuseFuse ialah rangka kerja sistem fail ruang pengguna yang membenarkan pengguna yang tidak mempunyai hak untuk mengakses dan mengendalikan sistem fail melalui sistem fail tersuai Memasang fius pada CentOS adalah sangat mudah, cuma ikuti langkah berikut: 1. Buka terminal dan Log masuk sebagai pengguna akar. 2. Gunakan arahan berikut untuk memasang pakej fius: ```yuminstallfuse3. Sahkan gesaan semasa proses pemasangan dan masukkan `y` untuk meneruskan. 4. Pemasangan selesai

Peranan geganti DHCP adalah untuk memajukan paket DHCP yang diterima ke pelayan DHCP lain pada rangkaian, walaupun kedua-dua pelayan berada pada subnet yang berbeza. Dengan menggunakan geganti DHCP, anda boleh menggunakan pelayan DHCP berpusat di pusat rangkaian dan menggunakannya untuk menetapkan alamat IP secara dinamik kepada semua subnet/VLAN rangkaian. Dnsmasq ialah pelayan protokol DNS dan DHCP yang biasa digunakan yang boleh dikonfigurasikan sebagai pelayan geganti DHCP untuk membantu mengurus konfigurasi hos dinamik dalam rangkaian. Dalam artikel ini, kami akan menunjukkan kepada anda cara mengkonfigurasi dnsmasq sebagai pelayan geganti DHCP. Topik Kandungan: Topologi Rangkaian Mengkonfigurasi Alamat IP Statik pada Geganti DHCP D pada Pelayan DHCP Berpusat

Dalam penghantaran data rangkaian, pelayan proksi IP memainkan peranan penting, membantu pengguna menyembunyikan alamat IP sebenar mereka, melindungi privasi dan meningkatkan kelajuan akses. Dalam artikel ini, kami akan memperkenalkan panduan amalan terbaik tentang cara membina pelayan proksi IP dengan PHP dan menyediakan contoh kod khusus. Apakah pelayan proksi IP? Pelayan proksi IP ialah pelayan perantaraan yang terletak di antara pengguna dan pelayan sasaran Ia bertindak sebagai stesen pemindahan antara pengguna dan pelayan sasaran, memajukan permintaan dan respons pengguna. Dengan menggunakan pelayan proksi IP

Apakah yang perlu saya lakukan jika saya tidak boleh memasuki permainan apabila pelayan epik berada di luar talian? Masalah ini mesti dihadapi oleh ramai rakan Apabila gesaan ini muncul, permainan yang tulen ini biasanya disebabkan oleh gangguan dari rangkaian dan perisian keselamatan Jadi bagaimana ia harus diselesaikan Saya ingin berkongsi penyelesaian dengan anda Saya harap tutorial perisian hari ini dapat membantu anda menyelesaikan masalah. Perkara yang perlu dilakukan jika pelayan epik tidak boleh memasuki permainan apabila ia di luar talian: 1. Ia mungkin diganggu oleh perisian keselamatan Tutup platform permainan dan perisian keselamatan dan kemudian mulakan semula. 2. Yang kedua ialah rangkaian berubah-ubah terlalu banyak Cuba mulakan semula penghala untuk melihat jika keadaannya OK, anda boleh cuba menggunakan rangkaian mudah alih 5g untuk beroperasi. 3. Kemudian mungkin ada lagi

Bagaimana untuk memasang sambungan PHPFFmpeg pada pelayan? Memasang sambungan PHPFFmpeg pada pelayan boleh membantu kami memproses fail audio dan video dalam projek PHP dan melaksanakan fungsi seperti pengekodan, penyahkodan, penyuntingan dan pemprosesan fail audio dan video. Artikel ini akan memperkenalkan cara memasang sambungan PHPFFmpeg pada pelayan, serta contoh kod tertentu. Pertama, kita perlu memastikan bahawa PHP dan FFmpeg dipasang pada pelayan. Jika FFmpeg tidak dipasang, anda boleh mengikuti langkah di bawah untuk memasang FFmpe

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest
