上传的NodeJS的base64图像蔚蓝Blob存储结果" ResourceNotFound"错误 [英] Nodejs uploading base64 image to azure blob storage results to "ResourceNotFound" error

查看:348
本文介绍了上传的NodeJS的base64图像蔚蓝Blob存储结果" ResourceNotFound"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是POST请求 JSON

  {
    名:images.jpg
    \"file\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQTEhIUEhIUFBUV…K9rk8hCAEkjFMUYiEAI+nHIpsQh0AkisDYRTOiCAbWVtgCtI6IlkHh7LDTQXLH0EIQBj//2Q==\"
}

和这里的要求在我的节点控制器/上传的路线,我使用 createBlockBlobFromText()从<一个HREF =htt​​ps://www.npmjs.com/package/azure-storage相对=nofollow> Azure的存储空间。

  VAR蔚蓝=要求('Azure的存储');
VAR blobSvc = azure.createBlobService('myblob.blob.core.windows.net/mycontainer',THE_KEY);controllers.upload =功能(REQ,资源,下一个){    VAR的startDate =新的日期();
    VAR expiryDate =新的日期(的startDate);    VAR sharedAccessPolicy = {
        AccessPolicy:{
            权限:az​​ure.BlobUtilities.SharedAccessPermissions.WRITE,
            开始:的startDate,
            有效期:expiryDate
        }
    };    VAR sharedAccessSignatureToken = blobSvc.generateSharedAccessSignature('资源',req.body.file,sharedAccessPolicy);
    变种sharedBlobService = azure.createBlobServiceWithSas('?'blobSvc.host.primaryHost +/+myContainer中'+ sharedAccessSignatureToken);    sharedBlobService.createBlockBlobFromText('myContainer中',req.body.name,req.body.file,功能(错误,因此,响应){
        如果(错误){
            res.send(错误);
            返回;
        }
        res.send(结果);
    });}

但是我收到此错误。

  {
    code:ResourceNotFound
    状态code:404,
    的requestId:bffa6099-0001-000b-53f9-80d18a000000
}


解决方案

需要修改的夫妇:


  • 有效期限应大于开始日期。

  • 共享访问签名应使用同一容器名称。

  • 共享访问签名应在文件名传递,而不是文件内容。

这些改变之后,code将类似于这样:

  VAR sharedAccessSignatureToken = blobSvc.generateSharedAccessSignature('myContainer中',req.body.name,sharedAccessPolicy);
VAR sharedBlobService = azure.createBlobServiceWithSas(blobSvc.host,sharedAccessSignatureToken);sharedBlobService.createBlockBlobFromText('myContainer中',req.body.name,req.body.file,功能(错误,因此,响应){
        如果(错误){
            res.send(错误);
            返回;
        }
        res.send(结果);
    });

Here is the post request JSON :

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

And here's my node controller under the request /upload route, I am using createBlockBlobFromText() from azure-storage.

var azure = require('azure-storage');
var blobSvc = azure.createBlobService('myblob.blob.core.windows.net/mycontainer', THE_KEY);

controllers.upload = function (req, res, next){

    var startDate = new Date();
    var expiryDate = new Date(startDate);

    var sharedAccessPolicy = {
        AccessPolicy: {
            Permissions: azure.BlobUtilities.SharedAccessPermissions.WRITE,
            Start: startDate,
            Expiry: expiryDate
        }
    };

    var sharedAccessSignatureToken = blobSvc.generateSharedAccessSignature('resources', req.body.file, sharedAccessPolicy);
    var sharedBlobService = azure.createBlobServiceWithSas(blobSvc.host.primaryHost + '/' + 'mycontainer' + '?' + sharedAccessSignatureToken);

    sharedBlobService.createBlockBlobFromText('mycontainer', req.body.name, req.body.file, function(error, result, response) {
        if (error) {
            res.send(error);
            return;
        }
        res.send(result);
    });

} 

However I am getting this error.

{
    "code": "ResourceNotFound",
    "statusCode": 404,
    "requestId": "bffa6099-0001-000b-53f9-80d18a000000"
}

解决方案

Couple of changes needed:

  • expiration date should be greater than start date.
  • shared access signature should use same container name.
  • shared access signature should be passed in file name, not file content.

After these changes, the code would be similar to this:

var sharedAccessSignatureToken = blobSvc.generateSharedAccessSignature('mycontainer', req.body.name, sharedAccessPolicy);
var sharedBlobService = azure.createBlobServiceWithSas(blobSvc.host, sharedAccessSignatureToken);

sharedBlobService.createBlockBlobFromText('mycontainer', req.body.name, req.body.file, function(error, result, response) {
        if (error) {
            res.send(error);
            return;
        }
        res.send(result);
    });

这篇关于上传的NodeJS的base64图像蔚蓝Blob存储结果&QUOT; ResourceNotFound&QUOT;错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆