在浏览器中使用截图工具截图后直接粘贴到页面上传,以及拖拽到页面标签区域上传

主要使用了粘贴(paste)事件,以及拖拽(drag)事件,其中拖拽时要禁用浏览器的默认将图片打开的行为

例子:

HTML部分:

    <div>截图后粘贴或拖拽到下框:<div id="upload" style="width: 800px; height: 600px; border: 1px solid red;"></div></div>

js部分:

  1 <script>
  2     (function (mod) {
  3         if (typeof exports == "object" && typeof module == "object") // CommonJS
  4             module.exports = mod();
  5         else if (typeof define == "function" && define.amd) // AMD
  6             return define([], mod);
  7         else // Plain browser env
  8             window.UploadImage = mod();
  9     })(function () {
 10
 11
 12         function UploadImage(id, url, key) {
 13             this.element = document.getElementById(id);
 14             this.url = url; //后端处理图片的路径
 15             this.imgKey = key || "AreaImgKey"; //提到到后端的name
 16
 17         }
 18         //粘贴图片事件
 19         UploadImage.prototype.paste = function (callback, formData) {
 20             var thatthat = this;
 21             this.element.addEventListener('paste', function (e) {//处理目标容器(id)的paste事件
 22
 23                 if (e.clipboardData && e.clipboardData.items.length > 0 && e.clipboardData.items[0].type.indexOf('image') > -1) {
 24                     var that = this,
 25                     file = e.clipboardData.items[0].getAsFile();//读取e.clipboardData中的数据
 26
 27                     dataReader(file, function (e) { //reader读取完成后,xhr上传
 28                         var fd = formData || (new FormData());
 29                         fd.append(thatthat.imgKey, this.result); // this.result得到图片的base64
 30
 31                         xhRequest('POST', thatthat.url, fd, callback, that);
 32
 33                     });
 34
 35                 }
 36             }, false);
 37
 38         };
 39
 40         //拖拽事件
 41         UploadImage.prototype.drag = function (callback, formData) {
 42             var that = this;
 43             this.element.addEventListener('drop', function (e) {//处理目标容器(id)的drop事件
 44                 e.preventDefault(); //取消默认浏览器拖拽效果
 45                 var fileList = e.dataTransfer.files; //获取文件对象
 46                 //检测是否是拖拽文件到页面的操作
 47                 if (fileList.length == 0) {
 48                     return false;
 49                 }
 50                 //检测文件是不是图片
 51                 if (fileList[0].type.indexOf('image') === -1) {
 52                     console.log && console.log("您拖的不是图片!");
 53                     return false;
 54                 }
 55                 var fd = formData || (new FormData());
 56                 fd.append(that.imgKey, fileList[0]); //
 57                 xhRequest('POST', that.url, fd, callback, this);
 58
 59             }, false);
 60         };
 61
 62         //上传
 63         UploadImage.prototype.upload = function (callback, formData) {
 64             this.drag(callback, formData);
 65             this.paste(callback, formData);
 66         };
 67
 68         preventDragDefault();
 69         //private
 70
 71         function xhRequest(method, url, formData, callback, callbackContext) {
 72             var xhr = new XMLHttpRequest();
 73             xhr.open(method, url, true);
 74             xhr.onload = function () {
 75                 callback && callback.call(callbackContext || this, xhr);
 76             };
 77             xhr.send(formData || (new FormData()));
 78
 79         }
 80
 81         function preventDragDefault()//阻止浏览器默认将图片打开的行为
 82         {
 83             document.addEventListener("dragleave", preventDefault);//拖离
 84             document.addEventListener("drop", preventDefault);//拖后放
 85             document.addEventListener("dragenter", preventDefault);//拖进
 86             document.addEventListener("dragover", preventDefault);//拖来拖去
 87         }
 88
 89         function preventDefault(e) {
 90             e.preventDefault();
 91         }
 92
 93         function dataReader(file, callback) {
 94             var reader = new FileReader();
 95             reader.onload = callback;
 96             reader.readAsDataURL(file);//获取base64编码
 97         }
 98         return UploadImage;
 99     });
100
101 </script>

调用:

<script>new UploadImage("upload", "UploadImage").upload(function (xhr) {var img = new Image();img.src = xhr.responseText;this.appendChild(img);});</script>

后端保存图片部分代码:

        [HttpPost]public ActionResult UploadImage(){if (!System.IO.Directory.Exists(Server.MapPath("upload"))){System.IO.Directory.CreateDirectory(Server.MapPath("upload"));}if (Request.Files.Count == 0){string strData = Request["AreaImgKey"].ToString(); //粘贴上传,取的base64编码Bitmap img = Base64StringToImage(strData);string imgName = "/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";if (img != null){img.Save(Server.MapPath("upload") + imgName, System.Drawing.Imaging.ImageFormat.Jpeg);return Content("upload" + imgName);}}else   //拖拽上传可直接拿到文件
            {string imgName = "/" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + Request.Files[0].FileName;Request.Files[0].SaveAs(Server.MapPath("upload") + imgName);return Content("upload" + imgName);}return Content("");}protected Bitmap Base64StringToImage(string strbase64){try{byte[] arr = Convert.FromBase64String(strbase64.Split(',')[1]);MemoryStream ms = new MemoryStream(arr);Bitmap bmp = new Bitmap(ms);ms.Close();return bmp;}catch (Exception ex){return null;}}

demo源码下载地址:链接:https://pan.baidu.com/s/1bMdl5saJruVy0d4DcFj6Bg 密码:iqui

截图后粘贴或拖拽上传相关推荐

  1. js 监听 复制图片 拖拽上传文件 并填充到markdown编辑器

    文章目录 效果 获取粘贴的文件 获取拖拽的文件 发送请求 生成markdown 语句 实现逻辑代码(主要实现) 后端代码 效果 获取粘贴的文件 const { clipboardData } = e; ...

  2. vue+element-ui实现富文本(含有图片粘贴拖拽上传)

    vue+element-ui实现富文本(含有图片粘贴拖拽上传) Just For Share | 仅仅分享 首先需要安装 cnpm i vue-quill-editor -D 富文本编辑器 cnpm ...

  3. html5 上传超大文件,HTML5教程 如何拖拽上传大文件

    本篇教程探讨了HTML5教程 如何拖拽上传大文件,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < 前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性 ...

  4. [开源应用]利用HTTPHandler+resumableJs+HTML5实现拖拽上传[大]文件

    前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP. ...

  5. 实现拖拽上传文件的一款小控件——dropzone

    由于专注所以专业.非常多小巧的东西乍一看非常不起眼,却在特定的领域表现不俗,就是由于集中了热情. dropzone就是这样一款小控件,实现拖拽上传.它不依赖于其他像jquery等JS库.并且支持多方面 ...

  6. dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库....

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

  7. 拖拽上传技术-----html5[转载]

    原网址:http://blog.163.com/mongying_net/blog/static/35112712012345352226/ 拖拽上传应用主要使用了以下HTML5技术: Drag&am ...

  8. Nodejs express、html5实现拖拽上传(转载)

    一.前言 文件上传是一 个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖 拽上传的需要的api.node ...

  9. js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一.实现效果 左侧区域支持选择一个系统中的文件夹,或者将文件夹拖拽到这个区域进行上传,右侧区域可以将文件夹的结构展示为树形结构. 二.代码实现 由于需要使用树形插件zTree,这个插件是依赖于jque ...

最新文章

  1. 链表划分为左小、中相等、右大
  2. 算法学习笔记2022.1.8
  3. python实例化对象做实参_如何在Python中记住类实例化?
  4. CVPR 2019 Oral | 华科开源效果超群的人体姿态迁移算法
  5. GitHub 报告:中国755万开发者排全球第二
  6. linux回收内存的方法,linux释放内存的方法
  7. JavaFX桌面应用开发-Button(按钮)与事件
  8. 顶级 Java 源码教程项目大汇总
  9. js日期格式化的两种方法
  10. 程序员高效率办公软件(推荐)。
  11. python模拟登陆微博_超详细的Python实现微博模拟登陆,小白都能懂
  12. 同态加密之Paillier算法
  13. word固定上方菜单栏
  14. 新版曝光骗子公示PHP系统源码+云黑系统
  15. ARP病毒的分析与防治
  16. rsyncd.conf 文件man手册翻译
  17. 扬名立万影评爬取与分析
  18. 树莓派/linux/Ubuntu取消鼠标指针光标,类似于平板模式。实测有效。
  19. python数学建模基础教程_Python 3破冰人工智能 从入门到实战 大学生数学建模竞赛数学建模算法与应用教程 机器学习深度学...
  20. 上海市考 计算机类岗位,2020上海公务员考试职位表解读:本科学历仍占主体

热门文章

  1. 计算机安全知识课堂导入设计,“计算机安全与防护教学设计”教学设计.doc
  2. html5 背景拼贴,AI创建漂亮的无缝拼贴图案背景样式
  3. flash activex java_Adobe flash player ActiveX和NPAPI和PPAPI 这三个软件有什么区别?
  4. tomcat 项目发布失败原因_项目启动tomcat失败的几种可能原因和解决方法
  5. html5 子标题栏,HTML5 建构主义标题栏页面模板
  6. python常用运维模块_python常用模块之一
  7. 数据交换平台_从零开始理解大数据架构之数据交换平台
  8. python16进制转2进制流_将十六进制文件转换为二进制文件
  9. mysql select内部原理_数据库SQL SELECT查询的工作原理
  10. 南昌理工学院的计算机科学与技术专业怎么样,南昌理工学院有哪些专业及什么专业好...