摘要:我們的功能需要用到的接口事件讀取完成,無(wú)論成功與否,還有方法將文件讀取為。檢測(cè)是否為圖片類型圖片的編碼這里設(shè)置獲取的數(shù)據(jù)獲取后臺(tái)的給的將文件讀取為上傳事件當(dāng)?shù)臅r(shí)候說(shuō)明我們成功的把圖片傳上七牛了,并且七牛給我們返回了一個(gè)字符串。
最近在做的一個(gè)聊天消息的功能。有個(gè)圖片上傳的功能,可以通過(guò)按鈕上傳也可以通過(guò)Ctrl+V上傳。按鈕上傳的我們可以通過(guò)七牛的API就可以做了,我們現(xiàn)在來(lái)說(shuō)說(shuō)Ctrl+V的實(shí)現(xiàn)是怎么樣的。
涉及到的APIFileReader()
paste事件
關(guān)于imageFile,用來(lái)把文件讀入內(nèi)存,并且讀取文件中的數(shù)據(jù)。提供一個(gè)異步的api,使用該api可以在瀏覽器主線程中異步訪問(wèn)文件系統(tǒng),讀取文件中的數(shù)據(jù)。我們的功能需要用到FileReader的接口事件onloadend(讀取完成,無(wú)論成功與否),還有方法readAsDataURL(將文件讀取為DataURL)。關(guān)于FileReader更多的事件和方法感興趣的同學(xué)可以自己去搜索,這里就不深究了。
1.結(jié)構(gòu)我們用的是textarea這個(gè)標(biāo)簽,為什么不使用div呢,因?yàn)槭沁€有@功能,為了兼容兩種方案。
//獲取id var textapp = document.getElementById("app");2.綁定輸入框的paste事件
我們這里的思路是通過(guò)檢測(cè)粘貼的對(duì)象類型,如果是圖片的話就拿到圖片的base64位。并且在圖片被讀取完成的時(shí)候,我們?cè)谌フ?qǐng)求后臺(tái)拿到token。并且在拿到了token后我們就去請(qǐng)求七牛的API。
textapp.addEventListener("paste", function(e){ for (var i = 0; i < e.clipboardData.items.length; i++) { // 檢測(cè)是否為圖片類型 if (e.clipboardData.items[i].kind == "file" && /image//.test(e.clipboardData.items[i].type)) { var imageFile = e.clipboardData.items[i].getAsFile(); var fileReader = new FileReader(); fileReader.onloadend = function(e) { //圖片的base64編碼 console.log(e.target.result); //這里設(shè)置獲取token的數(shù)據(jù) var thetoken = ""; var head = { "cmd": 0x4000C, "uid": parseInt(EXTUID), "ver": 1, "sid": SID, "apptype":1, "entry_type": 2 } var rdata = { "head":head } rdata = JSON.stringify(rdata); //獲取后臺(tái)的給的token $.post(request_url_server,rdata,function(data,status){ if (status == "success") { if (data["ret"] == 0){ var thetoken = data["token"]; pubt64(e.target.result.replace("data:image/png;base64,",""), imageFile, thetoken); } } }); }; //將文件讀取為DataUrl fileReader.readAsDataURL(imageFile); e.preventDefault(); break; } } });3.上傳事件
當(dāng)xhr.readyState==4的時(shí)候說(shuō)明我們成功的把圖片傳上七牛了,并且七牛給我們返回了一個(gè)json字符串。我們把這個(gè)字符串轉(zhuǎn)化成json對(duì)象,里面包含有圖片的key值,hash值,現(xiàn)在我們就拿到了key把消息發(fā)送給服務(wù)端啦。
function pubt64(pic,imageFile,thetoken){ //圖片的base64位 var pic = pic; //imageFile.size為圖片流的大小 var url = "http://upload.qiniu.com/putb64/"+imageFile.size; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState==4){ // 成功 console.log(xhr.responseText); //轉(zhuǎn)換成json對(duì)象,包含key值,hash值。 var dataImg = JSON.parse(xhr.responseText); //發(fā)送給服務(wù)端消息 sendImg("paste", dataImg); } } xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/octet-stream"); xhr.setRequestHeader("Authorization", "UpToken "+thetoken); xhr.send(pic); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90818.html
摘要:由于我們的富文本輸入框比較簡(jiǎn)單,所以只需要處理兩類數(shù)據(jù)即可,其一是普通的文本類型數(shù)據(jù),包括表情其二則是圖片類型數(shù)據(jù)。 最近折騰 Websocket,打算開發(fā)一個(gè)聊天室應(yīng)用練練手。在應(yīng)用開發(fā)的過(guò)程中發(fā)現(xiàn)可以插入 emoji ,粘貼圖片的富文本輸入框其實(shí)蘊(yùn)含著許多有趣的知識(shí),于是便打算記錄下來(lái)和大家分享。 倉(cāng)庫(kù)地址:chat-input-box預(yù)覽地址:https://codepen.io...
摘要:最近基于開發(fā)了一款圖床插件,現(xiàn)在已經(jīng)開源并上架應(yīng)用商店。通過(guò)方法把轉(zhuǎn)成,然后放在里測(cè)試一下看來(lái)效果是的,接下來(lái)就是對(duì)圖床插件進(jìn)行開發(fā)的步驟了。至此,整個(gè)插件的開發(fā)發(fā)布流程就已經(jīng)完成了。 showImg(https://user-images.githubusercontent.com/12172868/57382983-8f29b900-71e0-11e9-8fe9-c0f12fd54...
摘要:原文使用七牛云存儲(chǔ)的一些經(jīng)驗(yàn)總結(jié)錯(cuò)誤處理如果在與七牛的交互中出現(xiàn)狀態(tài)碼為的錯(cuò)誤,一句話,不要猶豫,直接聯(lián)系七牛技術(shù)支持。但是筆者發(fā)現(xiàn),在使用七牛云轉(zhuǎn)化后的視頻,這樣做是無(wú)效的。 近段時(shí)間將使用七牛云存儲(chǔ)來(lái)存放用戶上傳的數(shù)據(jù),客戶端通過(guò)七牛的js-sdk與七牛交互,服務(wù)端C#實(shí)現(xiàn)了七牛相關(guān)的接口。在這過(guò)程中多多少少遇到點(diǎn)問(wèn)題,在這里總結(jié)一下。原文:使用七牛云存儲(chǔ)的一些經(jīng)驗(yàn)總結(jié) 599錯(cuò)...
摘要:如果有錯(cuò)誤,,可通過(guò)下文中的監(jiān)聽函數(shù)拿到該錯(cuò)誤碼進(jìn)行自定義處理是一個(gè)數(shù)組,返回若干圖片的線上地址圖片地址圖片地址參考部分 最近看了一些有關(guān)于js實(shí)現(xiàn)圖片粘貼上傳的demo,實(shí)現(xiàn)如下: (這里只能檢測(cè)到截圖粘貼和圖片右鍵復(fù)制之后粘貼) demo1: document.addEventListener(paste, function (event) { consol...
閱讀 683·2021-11-22 09:34
閱讀 3822·2021-09-22 15:42
閱讀 1327·2021-09-03 10:28
閱讀 1072·2021-08-26 14:13
閱讀 1901·2019-08-29 15:41
閱讀 1423·2019-08-29 14:12
閱讀 3364·2019-08-26 18:36
閱讀 3307·2019-08-26 13:47