Nodejs使用.createBlockBlobFromLocalFile()将base64映像上传到azure blob存储

我想通过Base64表单上传从networking应用和移动应用发送的用户的个人资料图片。

POST请求上,他们需要在正文上发送一个JSON

 { "name":"profile-pic-123.jpg", "file":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQTEhIUEhIUFBUV…K9rk8hCAEkjFMUYiEAI+nHIpsQh0AkisDYRTOiCAbWVtgCtI6IlkHh7LDTQXLH0EIQBj//2Q==" // the base64 image } 

现在在服务器端使用NodeExpress ,我使用了这个名为azure-storage npm模块,它提供了一个使用web服务将file upload到azure blob存储的好方法。

但是有一些我无法理解的。 这里是我的控制器的一部分代码。 我成功创build了所有必要的连接和键,以及创build一个blobService

 controllers.upload = function(req, res, next){ // ... // generated some sastoken up here // etc. // ... var uploadOptions = { container: 'mycontainer', blob: req.body.name, // im not sure about this path: req.body.file // im not sure about this either } sharedBlobService.createBlockBlobFromLocalFile(uploadOptions.container, uploadOptions.blob, uploadOptions.path, function(error, result, response) { if (error) { res.send(error); } console.log("result", result); console.log("response", response); }); } 

我得到这个错误:

 { "errno": 34, "code": "ENOENT", "path": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAAB..." } 

在这种情况下,您不应该使用createBlockBlobFromLocalFile 。 相反,您应该使用createBlockBlobFromText ,因为您没有上传本地文件,而是在请求正文中包含内容。

这里是代码:

 var uploadOptions = { container: 'mycontainer', blob: req.body.name, text: req.body.file } sharedBlobService.createBlockBlobFromText(uploadOptions.container, uploadOptions.blob, uploadOptions.text, { contentType: 'image/jpeg', contentEncoding: 'base64' }, function(error, result, response) { if (error) { res.send(error); } console.log("result", result); console.log("response", response); }); 

blob只是文件名,这是“profile-pic-123.jpg”, path是文件的本地path。 由于您不是在本地存储在服务器端的文件, path在这种情况下是没有意义的。

如果您需要更多关于存储的信息,请参阅以下内容