2016-09-19 53 views
1

我將映像轉換爲base64我試圖使用createBlockBlobFromText將其上傳到我的azure blob存儲。將base64映像成功保存到Azure Blob存儲,但blob映像始終損壞/小白框

self.blobServer.createBlockBlobFromText(containerName, fileName, baseStrChars, { contentSettings: { contentType: 'image/jpeg' } }, function(error, result, response) { 
    if (error) { 
     console.log(error); 
    } 
    console.log("result", result); 
    console.log("response", response); 
}); 

我新的JPEG圖像出現在Blob存儲容器,但是當我去團塊圖像URL我總是this

我的容器的訪問策略設置爲容器,我將base64字符串粘貼到base64圖像轉換器並顯示正確的圖像。問題似乎是我創建blob而不是base64字符串的方式。

我很困惑,爲什麼整個流程似乎工作,但仍然是圖像被打破,當我去的URL。有任何想法嗎 ?

+0

有你看看什麼是存儲BLOB中? 'curl -s http:// blob.url/image.jpg',是JFIF還是亂碼?這就是我的意思:http://i.imgur.com/lkAtjkS.png – evilSnobu

+0

還有一件事,瀏覽器懶得緩存Azure blob死亡!確保您在全新的隱身會話中進行測試。 – evilSnobu

+0

這不起作用。當文件以二進制格式保存時,瀏覽器顯示圖像。爲了顯示base64圖像,你需要使用CSS(Data-Uri)。請嘗試將圖像保存爲二進制文件,而不是將內容轉換爲bas64字符串。 HTH。 –

回答

5

要通過瀏覽器中的Url直接訪問圖像需要二進制內容。您可以將base64編碼的字符串轉換爲node.js後端中的二進制緩衝區,然後將緩衝區字符串上傳到Azure存儲。

請嘗試下面的代碼片段:

var rawdata = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='; 
var matches = rawdata.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/); 
var type = matches[1]; 
var buffer = new Buffer(matches[2], 'base64'); 

blobsrv.createBlockBlobFromText('mycontainer','profile-pic-123.jpg', buffer, {contentType:type}, function(error, result, response) { 
     if (error) { 
      console.log(error); 
     }else{ 
     console.log(result) 
     } 
    }); 
+0

ahhh我今天早上在玩緩衝區,這個工作非常棒,完美無缺!我真的不能夠感謝你!看起來像我會完成所有我的故事這個衝刺畢竟大聲笑:) – Tomas