2016-03-18 2 views
1

Вот запрос пост JSON:Nodejs загрузка base64 изображение лазурных результатов хранения BLOB ошибки «ResourceNotFound»

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

А вот мой контроллер узла по маршруту запроса /upload, я использую createBlockBlobFromText() из 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); 
    }); 

} 

Однако я получаю эту ошибку.

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

Один очевидный вопрос: делает контейнер существуют в вашей учетной записи хранилища? –

+0

@GauravMantri Да, это действительно более 100%. – CENT1PEDE

+0

@GauravMantri Я передаю правильный формат изображения как '" data: image/jpeg ... "' to 'createBlockBlobFromText()' function? – CENT1PEDE

ответ

3

Пара изменений необходимо:

  • дата истечения срока действия должно быть больше, чем дата начала.
  • подпись общего доступа должна использовать одно и то же имя контейнера.
  • подпись общего доступа должна передаваться в имени файла, а не в содержимом файла.

После этих изменений код будет похож на это:

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); 
    }); 
+1

Ответ на мой вопрос совершенно прав, но на самом деле вам вообще не нужно использовать дату начала. Если он не установлен, служба просто проверит, что дата до истечения срока действия, которая выглядит так, как вы хотите. Если вы используете дату начала, это также может вызвать проблемы, при которых SAS не работает немедленно, если между вашим компьютером и сервером хранения есть перекос. –

Смежные вопросы