2016-09-19 44 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