XML/HTML 코드
클립보드에 콘텐츠 복사
- <div id="상자" 스타일="너비: 800px; 높이: 400px; 테두리: 1px 단색;" contenteditable="true">div>
-
<스크립트 유형="text/ javascript" src="require.js"> 스크립트>
-
<스크립트>
- require(['UploadImage'], 함수 (UploadImage) {
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上传完成后的回调
-
var img = 새 이미지();
-
img.src = xhr.responseText;
- this.appendChild(img);
- });
- })
-
스크립트>
三.浏览器支持
当前版本只支持以下,浏览器,后期可能会支持更多浏览器。
•IE1 1
•크롬
•FireFox
•Safari(未测式,理论应该支持)
四.原理及源码
1.粘贴上传
处目标容器(id) 붙여넣기 작업, 读取e.clipboardData中的数据, 如果是图文进行以下处理:
사용 H5 File API(FileReader)获取文件的 base64代码, 并构建FormData异步上传.
2.拖拽上传
处理目标容器(id)의 drop事件,读取e.dataTransfer.files(H5 File API: FileList)中的数据,如果是图文并构建FormData异步上传。
以下是初版本代码,比较简单。不再赘述。
부份核心代码
XML/HTML 코드复复内容到剪贴板
- 이미지 업로드(id, url, key) 기능
- {
-
this.element = 문서.getElementById(id)
-
this.url = url; //백엔드 이미지 처리 경로
-
this.imgKey = key || "PasteAreaImgKey" //백엔드에 언급된 이름
- }
-
UploadImage.prototype.paste = 함수(콜백, formData)
- {
-
var 저것 = 이것;
this.element.addEventListener('paste', function (e) {//대상 컨테이너(id)의 붙여넣기 이벤트 처리 -
if (e.clipboardData && e.clipboardData.items[0].type.indexOf('image') -
> -1) {
var -
저것 = 이것,
-
리더 = 새 FileReader()
-
file = e.clipboardData.items[0].getAsFile();//e.clipboardData의 데이터 읽기: Blob 객체
-
reader.onload = function (e) { //리더 읽기가 완료된 후 xhr이 업로드됩니다.
var -
xhr = new XMLHttpRequest(),
-
fd = formData || (new FormData());;
xhr.open('POST', thatthat.url, true)
xhr.onload-
= 함수 () {
callback.call(that, xhr)
- }
- fd.append(that.imgKey, this.result); // this.result는 이미지의 base64를 가져옵니다
- xhr.send(fd)
- }
- reader.readAsDataURL(file);//base64 인코딩 가져오기
- }
- }, 거짓)
- }
-