浏览器中用JavaScript获取剪切板中的文件

本文转自我的个人网站   , 原文地址:http://www.zoucz.com/blog/2016/01/29/get-file-from-clipboard/  ,欢迎前往交流讨论

 

在网页上编辑内容时,有时候需要插入图片,一般的做法是:

  1. 从网络上下载图片至本地 or 截图保存至本地
  2. 在编辑器中点击图片上传按钮,选择本地文件,等待上传完成
  3. 将上传好的图片链接插入编辑器中

这样做太麻烦了,我比较喜欢的操作是开着QQ或者其他的一些截图工具,截图-粘贴 。为了这样做我们需要在浏览器中获取剪切板中的文件。chrome浏览器支持onPaste事件,事件对象中可以获取剪切板中的文件内容,代码如下:

function paste(event){
    var items = (event.clipboardData || event.originalEvent.clipboardData).items;
    var dfd=Q.defer();
    if(items.length>0 && items[0].kind==="file"){
        var blob = items[0].getAsFile();
        var reader = new FileReader();
        var filename=new Date().getTime()+".png";
        reader.onload = function(e){
            var base64=e.target.result;
            base64=base64.replace(/^data:image\/(png|jpg);base64,/, "");
            var path=writeImg(filename,base64);
            dfd.resolve(path);
        };
        reader.readAsDataURL(blob);
    }
    else{
        dfd.resolve();
    }
    return dfd.promise;
}

当这种场景发生在纯浏览器环境时,writeImg方法也可以选择不保存到本地,而是通过http上传到一个文件服务器,此时可以直接用blob对象上传而不用读取。

其中Q是一个promise库,writeImg是一个使用node写入本地文件系统(nw.js下运行),见我的blog编辑器FileReader可以把blob对象读取为dataurl(实际上就是用base64表示的uri),ArrayBuffer等格式的数据:

reader

转载于:https://www.cnblogs.com/tzyy/p/5172382.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值