Maison  >  Article  >  interface Web  >  Exemples pour expliquer comment js implémente le collage d'images, leur téléchargement sur le serveur et leur affichage

Exemples pour expliquer comment js implémente le collage d'images, leur téléchargement sur le serveur et leur affichage

小云云
小云云original
2017-12-23 11:18:171436parcourir

Cet article vous apporte principalement un exemple de js implémentant le collage d'images, leur téléchargement sur le serveur et leur affichage. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.

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, &#39;paste&#39;, 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, &#39;paste&#39;, isChrome);
      }
      reader.readAsDataURL(blob);//传入blob对象,读取文件
     }*/
    } else {
     //for firefox
     setTimeout(function () {
      //设置setTimeout的原因是为了保证图片先插入到p里,然后去获取值
      var imgList = document.querySelectorAll(&#39;#aaa img&#39;),
       len = imgList.length,
       src_str = &#39;&#39;,
       i;
      for ( i = 0; i < len; i ++ ) {
       if ( imgList[i].className !== &#39;my_img&#39; ) {
        //如果是截图那么src_str就是base64 如果是复制的其他网页图片那么src_str就是此图片在别人服务器的地址
        src_str = imgList[i].src;
       }
      }
      uploadImgFromPaste(src_str, &#39;paste&#39;, isChrome);
     }, 1);
    }
   } else {
    //for ie11
    setTimeout(function () {
     var imgList = document.querySelectorAll(&#39;#aaa img&#39;),
      len = imgList.length,
      src_str = &#39;&#39;,
      i;
     for ( i = 0; i < len; i ++ ) {
      if ( imgList[i].className !== &#39;my_img&#39; ) {
       src_str = imgList[i].src;
      }
     }
     uploadImgFromPaste(src_str, &#39;paste&#39;, isChrome);
    }, 1);
   }
  })

  //调用图片上传接口,将file文件以formData形式上传
  function uploadImgFromPaste (file, type, isChrome) {
   var formData = new FormData();
   formData.append(&#39;files&#39;, file);
   formData.append(&#39;submission-type&#39;, type);

   var xhr = new XMLHttpRequest();
   xhr.open(&#39;POST&#39;, &#39;/upload_editor_photo3&#39;);
   xhr.onload = function () {
    console.log(xhr.readyState);
    if ( xhr.readyState === 4 ) {
     if ( xhr.status === 200 ) {
      var data = JSON.parse(xhr.responseText),
       editor = document.getElementById(&#39;aaa&#39;);
      if ( isChrome ) {
       var len=data.data.length;
       for ( var i = 0; i < len; i ++) {
        var img = document.createElement(&#39;img&#39;);
        img.className = &#39;my_img&#39;;
        img.src = data.data[i]; //设置上传完图片之后展示的图片
        editor.appendChild(img);
       }
      } else {
       var imgList = document.querySelectorAll(&#39;#aaa img&#39;),
        len = imgList.length,
        i;
       for ( i = 0; i < len; i ++) {
        if ( imgList[i].className !== &#39;my_img&#39; ) {
         imgList[i].className = &#39;my_img&#39;;
         imgList[i].src = data.data[i];
        }
       }
      }

     } else {
      console.log( xhr.statusText );
     }
    };
   };
   xhr.onerror = function (e) {
    console.log( xhr.statusText );
   }
   xhr.send(formData);
  }

démo2 :


// 处理粘贴事件
  $("#aaa").on(&#39;paste&#39;, 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(&#39;files&#39;, f);
    var editor=document.getElementById("aaa");
    $.ajax({
     url:"/upload_editor_photo3",
     type: &#39;POST&#39;,
     dataType: &#39;json&#39;,
     data: fd,
     processData: false,
     contentType: false,
     xhrFields: { withCredentials: true },
     headers: {
      &#39;Access-Control-Allow-Origin&#39;: &#39;*&#39;,
      &#39;Access-Control-Allow-Credentials&#39;: &#39;true&#39;
     },
     success: function(res){
      var len=res.data.length;
      for ( var i = 0; i < len; i ++) {
       var img = document.createElement(&#39;img&#39;);
       img.src = res.data[i]; //设置上传完图片之后展示的图片
       editor.appendChild(img);
      }
     },
     error: function(){
      alert("上传图片错误");
     }
    });
   }
  }

Remarque : Comme il ne prend en charge que la copie d'images par clic droit, vous ne pouvez pas copier deux images à la fois. Copiez et collez toutes les images à télécharger pour une étude plus approfondie. 🎜>

html :


Format des données de retour de l'interface :
<p id="aaa" contentEditable="true" style="height:800px;border:1px solid #ccc"></p>


L'avez-vous appris ? Dépêchez-vous et essayez-le.
{
 // errno 即错误代码,0 表示没有错误。
 //  如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
 errno: 0,

 // data 是一个数组,返回若干图片的线上地址
 data: [
  &#39;图片1地址&#39;,
  &#39;图片2地址&#39;,
  &#39;……&#39;
 ]
}

Recommandations associées :

Plug-in jQuery pour coller des images dans le navigateur --pasteimg guide d'utilisation_jquery

php et ajax Et un exemple de h5 implémentant la fonction de téléchargement d'images

Introduction au plug-in ThinkPHP5.0 pour implémenter le téléchargement d'images

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:
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