瀏覽器中用JavaScript獲取剪切板中的文件

TobyMcKelve 8年前發布 | 7K 次閱讀 JavaScript開發 JavaScript

來自: http://www.cnblogs.com/tzyy/p/5172382.html

本文轉自我的 個人網站  , 原文地址: 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等格式的數據:

 本文由用戶 TobyMcKelve 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!