圖片上傳插件ImgUploadJS:用HTML5 File API 實現(xiàn)截圖粘貼上傳、拖拽上傳
發(fā)布時間:2016-01-20 14:19:50 作者:佚名
我要評論

這篇文章主要介紹了圖片上傳插件ImgUploadJS:用HTML5 File API 實現(xiàn)截圖粘貼上傳、拖拽上傳 的相關資料,需要的朋友可以參考下
一 . 背景及效果
當前互聯(lián)網(wǎng)上傳文件最多的就是圖片文件了,但是傳統(tǒng)web圖片的截圖上傳需要:截圖保存->選擇路徑->保存后再點擊上傳->選擇路徑->上傳->插入。
圖片文件上傳也需要:選擇路徑再->上傳->插入,步驟繁雜,互聯(lián)網(wǎng)體驗為王,如果支持截圖粘貼上傳、拖拽上傳將大大提升體驗。
當前知乎和github對現(xiàn)代瀏覽器均支持這兩種特性,閑來無事就學習實現(xiàn)了一下,今天就說一說這個1kb插件實現(xiàn)什么功能,怎么使用和原理。
首先看一下插效果:
截圖后直接粘貼上傳。
二.使用示例
直接調用:
當前互聯(lián)網(wǎng)上傳文件最多的就是圖片文件了,但是傳統(tǒng)web圖片的截圖上傳需要:截圖保存->選擇路徑->保存后再點擊上傳->選擇路徑->上傳->插入。
圖片文件上傳也需要:選擇路徑再->上傳->插入,步驟繁雜,互聯(lián)網(wǎng)體驗為王,如果支持截圖粘貼上傳、拖拽上傳將大大提升體驗。
當前知乎和github對現(xiàn)代瀏覽器均支持這兩種特性,閑來無事就學習實現(xiàn)了一下,今天就說一說這個1kb插件實現(xiàn)什么功能,怎么使用和原理。
首先看一下插效果:
截圖后直接粘貼上傳。
二.使用示例
直接調用:
XML/HTML Code復制內容到剪貼板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="UploadImage.js"></script>
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上傳完成后的回調
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
AMD/CMD
XML/HTML Code復制內容到剪貼板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="require.js"></script>
- <script>
- require(['UploadImage'], function (UploadImage) {
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上傳完成后的回調
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
- })
- </script>
三.瀏覽器支持
當前版本只支持以下,瀏覽器,后期可能會支持更多瀏覽器。
•IE11
•Chrome
•FireFox
•Safari(未測式,理論應該支持)
四.原理及源碼
1.粘貼上傳
處理目標容器(id)的paste事件,讀取e.clipboardData中的數(shù)據(jù),如果是圖片進行以下處理:
用H5 File API(FileReader)獲取文件的base64代碼,并構建FormData異步上傳。
2.拖拽上傳
處理目標容器(id)的drop事件,讀取e.dataTransfer.files(H5 File API: FileList)中的數(shù)據(jù),如果是圖片并構建FormData異步上傳。
以下是初版本代碼,比較簡單。不再贅述。
部份核心代碼
XML/HTML Code復制內容到剪貼板
- function UploadImage(id, url, key)
- {
- this.element = document.getElementById(id);
- this.url = url; //后端處理圖片的路徑
- this.imgKey = key || "PasteAreaImgKey"; //提到到后端的name
- }
- UploadImage.prototype.paste = function (callback, formData)
- {
- var thatthat = this;
- this.element.addEventListener('paste', function (e) {//處理目標容器(id)的paste事件
- if (e.clipboardData && e.clipboardData.items[0].type.indexOf('image') > -1) {
- var that = this,
- reader = new FileReader();
- file = e.clipboardData.items[0].getAsFile();//讀取e.clipboardData中的數(shù)據(jù):Blob對象
- reader.onload = function (e) { //reader讀取完成后,xhr上傳
- var xhr = new XMLHttpRequest(),
- fd = formData || (new FormData());;
- xhr.open('POST', thatthat.url, true);
- xhr.onload = function () {
- callback.call(that, xhr);
- }
- fd.append(thatthat.imgKey, this.result); // this.result得到圖片的base64
- xhr.send(fd);
- }
- reader.readAsDataURL(file);//獲取base64編碼
- }
- }, false);
- }
相關文章
- vue.js批量上傳文件代碼是一款可實現(xiàn)刪除,圖片預覽,文件批量上傳,顯示文件大小等功能,非常不錯,需要的朋友前來下載使用吧2020-03-05
html+css+js 實現(xiàn)拍照預覽上傳圖片功能
我們在做網(wǎng)頁時經(jīng)常會需要有上傳圖片的需求,可能是選擇圖片或者拍照上傳。本文記錄了使用css+js實現(xiàn)圖片選中后的預覽及壓縮上傳功能,需要的朋友參考下吧2018-01-15- 基于vue.js框架制作圖片上傳組件特效源碼是一款適用于手機端的圖片上傳代碼,支持批量上傳,拖到圖片上傳,顯示文件數(shù)量和大小等功能。本段代碼可以在各個網(wǎng)頁使用,有需要2017-10-17
- JS實現(xiàn)手機端多圖片上傳刪除特效源碼,因multiple在安卓手機中不兼容,所以在安卓上只能一次選中一張圖片,在iOS系統(tǒng)上可以實現(xiàn)多圖片的上傳。本段代碼可以在各個網(wǎng)頁使用2017-02-22
使用spring mvc+localResizeIMG實現(xiàn)HTML5端圖片壓縮上傳的功能
這篇文章主要介紹了使用spring mvc+localResizeIMG實現(xiàn)HTML5端圖片壓縮上傳的功能,非常具有實用價值,需要的朋友可以參考下。2016-12-16- JS圖片上傳對比度飽和度調整代碼是一款從本地上傳圖片到服務端,然后通過濾器算法來處理圖片,為圖片設置不同的亮度,對比度和飽和度,本段代碼適應于所有網(wǎng)頁使用,有需要2016-09-21
HTML5結合zyfile.js插件實現(xiàn)的多文件圖片預覽上傳功能特效源碼
是一段實現(xiàn)了可以選擇本地圖片預覽并上傳的效果代碼,在預覽區(qū)的圖片是可以刪除的,同時將本地圖片拖動到網(wǎng)頁規(guī)定的區(qū)域內也是可以自動添加到預覽區(qū)的,此段代碼適用于所有2015-01-29- js上傳選擇圖片功能代碼是一款類似抽獎程序,上傳預覽圖片選擇任意一張,可以重置和停止選擇,上傳之后也可以還原,需要的朋友可以來腳本之家下載2020-06-12