2015-09-20 155 views
0

根据这post,这应该是可能的。但是,我无法让它工作。一个令人困惑的部分是,我是否正在使用Azure存储的正确版本?在那篇文章中,timm说一年前使用createBlockBlobFromText将二进制数据保存到azure blob存储?

这是在0.9.x发布的。

但是,没有0.9的版本。最新的azure存储是0.6.0。

这里是我的服务器代码(node.js中):

var buf = new Buffer(upd.picture, 'binary'); 
blobService.createBlockBlobFromText(containerName, fileName, buf, function (error, result, response) { 
}); 

在客户端(angular.js),二进制数据被读取这样的:

var file = document.getElementById('file').files[0]; 
var reader = new FileReader(); 
reader.onloadend = function (e) { 
    upd.picture = e.target.result; 
    .... 
} 
reader.readAsBinaryString(file); 

对于我的测试,我上传了一张jpg图像,保存在azure blob中的文件无法在网络浏览器中显示。但是,如果我使用createBlockBlobFromLocalFile来上传文件,它将起作用。我做错了什么?

UPDATE:

好吧,我终于想通了。我只需要改变上述一行

var buf = new Buffer(upd.picture.substr(23), 'base64'); 

的问题是,该文件已经转换与头based64“数据:图像/ JPEG; BASE64”,这搅乱了二进制数据。

+0

可能你需要提供Content-Type标题,说它是一个图像。看看那篇文章:http://stackoverflow.com/questions/15450102/create-thumbnail-image-using-windows-azure-blob-storage –

+0

我也想知道,但我想作为内容 - 类型? – newman

+0

我试图添加options = {contentType:'image/jpeg',contentTypeHeader:'image/jpeg'},但它没有帮助。 – newman

回答

0

为了阐明版本问题,提到的版本timm是“azure”模块的版本。现在Azure存储SDK与“azure-storage”模块一起发布。 使用最新模块可能会解决您的问题。

+0

感谢您的澄清。 – newman