Maison interface Web js tutoriel js implémentation du collage d'images, de leur téléchargement sur le serveur et de leur affichage

js implémentation du collage d'images, de leur téléchargement sur le serveur et de leur affichage

Dec 09, 2017 pm 01:25 PM
javascript 服务器

Dans cet article, nous partagerons avec vous un exemple de comment coller, télécharger et afficher des images sur le serveur à l'aide de js. Après avoir appris cela, j'espère que vous pourrez maîtriser la méthode de collage, de téléchargement et d'affichage d'images js. au serveur.

Récemment, j'ai vu quelques démos sur l'implémentation js du collage et du téléchargement d'images. L'implémentation est la suivante : (Seuls le collage de capture d'écran et le copier-coller d'image par clic droit peuvent être détectés ici)

démo1 :

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);
  }
Copier après la connexion

démo2 :

// 处理粘贴事件
  $("#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("上传图片错误");
     }
    });
   }
  }
Copier après la connexion

Remarque : Comme il ne prend en charge que la copie des images par clic droit, vous ne pouvez pas copier deux images à la fois. Toutes les images sont copiées et collées pour être téléchargées. étude plus approfondie.

html :

<p id="aaa" contentEditable="true" style="height:800px;border:1px solid #ccc"></p>
Copier après la connexion

Format des données de retour de l'interface :

{
 // errno 即错误代码,0 表示没有错误。
 //  如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
 errno: 0,

 // data 是一个数组,返回若干图片的线上地址
 data: [
  '图片1地址',
  '图片2地址',
  '……'
 ]
}
Copier après la connexion

Recommandations associées :

Explication PHP détaillée sur la façon de télécharger des images sur le serveur via WeChat

Emballage du code de téléchargement d'images JavaScript

Comment télécharger des images WeChat sur le serveur en PHP ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Explication détaillée du fusible d'installation CentOS et du serveur d'installation CentOS Explication détaillée du fusible d'installation CentOS et du serveur d'installation CentOS Feb 13, 2024 pm 08:40 PM

Explication détaillée du fusible d'installation CentOS et du serveur d'installation CentOS

Comment résoudre le problème selon lequel la recherche eMule ne peut pas se connecter au serveur Comment résoudre le problème selon lequel la recherche eMule ne peut pas se connecter au serveur Jan 25, 2024 pm 02:45 PM

Comment résoudre le problème selon lequel la recherche eMule ne peut pas se connecter au serveur

Solution à l'impossibilité de se connecter au serveur RPC et à l'impossibilité d'accéder au bureau Solution à l'impossibilité de se connecter au serveur RPC et à l'impossibilité d'accéder au bureau Feb 18, 2024 am 10:34 AM

Solution à l'impossibilité de se connecter au serveur RPC et à l'impossibilité d'accéder au bureau

Guide des meilleures pratiques pour créer des serveurs proxy IP avec PHP Guide des meilleures pratiques pour créer des serveurs proxy IP avec PHP Mar 11, 2024 am 08:36 AM

Guide des meilleures pratiques pour créer des serveurs proxy IP avec PHP

Comment configurer Dnsmasq comme serveur relais DHCP Comment configurer Dnsmasq comme serveur relais DHCP Mar 21, 2024 am 08:50 AM

Comment configurer Dnsmasq comme serveur relais DHCP

Que dois-je faire si je ne peux pas accéder au jeu lorsque le serveur Epic est hors ligne ? Solution pour laquelle Epic ne peut pas accéder au jeu hors ligne Que dois-je faire si je ne peux pas accéder au jeu lorsque le serveur Epic est hors ligne ? Solution pour laquelle Epic ne peut pas accéder au jeu hors ligne Mar 13, 2024 pm 04:40 PM

Que dois-je faire si je ne peux pas accéder au jeu lorsque le serveur Epic est hors ligne ? Solution pour laquelle Epic ne peut pas accéder au jeu hors ligne

Comment installer l'extension PHP FFmpeg sur le serveur ? Comment installer l'extension PHP FFmpeg sur le serveur ? Mar 28, 2024 pm 02:39 PM

Comment installer l'extension PHP FFmpeg sur le serveur ?

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP

See all articles