我不是100%確定,但從我讀取當我通過websocket發送blob(二進制數據)時,blob不包含任何文件信息。我使用https://github.com/websockets/wsnodejs二進制websocket mimetype處理
(也正式規範規定wesockets只發送原始二進制)- 文件大小
- 的MIME類型
- 用戶信息(在後面解釋)
測試:
直接從輸入文件發送blob。
ws.send(this.files[0]) //this should already contain the info
用文件中的原生javascript api創建一個新的blob,設置正確的mimetype。
ws.send(new Blob([this.files[0]],{type:this.files[0].type})); //also this
雙方你只能得到沒有任何其他信息的有效blob。
是否有可能追加一個4kb的預定義json數據轉換爲包含mimetype和文件大小等重要信息的二進制文件,然後在需要的時候分開4kb?
{ 「MIME」: 「TXT /純」, 「大小」:345} ____________ 4KB_REST_OF_THE_BINARY
OR
ws.send({"mime":"txt\/plain","size":345})
ws.send(this.files[0])
即使第一個是最差解決方案有史以來它可以讓我一次發送一切。
第二個有一個很大的問題:
這是一個聊天,允許也發送文件,如文檔,圖片,音樂視頻。
在發送二進制數據之前,我可以在發送文件/用戶信息時寫一些握手系統。
但
如果另一個人也發送一個文件,因爲它是異步,握手系統沒有機會來確定至極文件是正確的用戶和MIME類型是正確的。
那麼如何在多用戶異步環境中正確發送二進制文件?
我知道我可以轉換爲base64,但是這大了30%。
btw。共與蘋果失望... ... - 雖然chrome可以正確顯示每個二進制數據,但我的ios設備無法處理blob,只有圖像以blob或base64格式顯示,甚至不是簡單的txt文件。基本上只有一個<img>
標籤可以讀取動態文件。
一切是如何工作的(現在):
- 用戶發送一個文件
- 得到的NodeJS二進制數據,還用戶信息...但不是MIME類型,文件名,大小。
- nodejs向所有用戶廣播原始二進制文件(不能指定用戶&文件信息)
- 客戶端創建一個bloburl(誰發送那個?XD)。
編輯
我現在有:
客戶端1(發送文件)CHROME
fileInput.addEventListener('change',function(e){
var file=this.files[0];
ws.send(new Blob([file],{
type:file.type //<- SET MIMETYPE
}));
//file.size
},false);
注:file
已經是一個blob ......但這是你通常會創建一個指定mimetype的新blob。
服務器(二進制數據廣播到其他客戶端)的NodeJS
aaaaaand的MIME類型不見了...
ws.addListener('message',function(binary){
var b=0,c=wss.clients.length;
while(b<c){
wss.clients[b++].send(binary)
}
});
客戶端2(臨危二進制)CHROME
ws.addEventListener('message',function(msg){
var blob=new Blob([msg.data],{
type:'application/octet-stream' //<- LOST
});
var file=window.URL.createObjectURL(blob);
},false);
說明:m.data
已經是一個blob ...但這通常會創建一個新的blob,指定mimetype女巫丟失。
在客戶端2我需要的MIME類型,自然我也需要有關用戶的信息,可以至極從客戶端1或服務器(不是一個好的選擇)檢索...
你有沒有想過使用BinaryPack? https://github.com/binaryjs/node-binarypack https:// github。com/binaryjs/js-binarypack – Ben 2015-04-08 17:24:10
對不起,我試圖用ws(websockets)來實現它 – cocco 2015-04-08 17:52:06
Right,BinaryJack是BinaryJS用於通過websocket傳輸文件等的東西http://binaryjs.com/ – Ben 2015-04-08 18:33:09