2016-03-18 73 views
1

這裏是POST請求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 ...「''傳遞給'createBlockBlobFromText()'函數的圖像格式是正確的嗎? – 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

Mine的答案是完全正確的,但實際上根本不需要使用開始日期。如果沒有設置,服務會檢查日期是否在期滿之前,看起來像你想要的。如果使用開始日期,則如果計算機與存儲服務器之間存在時鐘偏差,則也可能導致SAS無法立即工作的問題。 –