Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用generateSharedAccessSignature将文件上载到Azure BlockBlog_Node.js_Azure_Azure Storage_Azure Node Sdk - Fatal编程技术网

Node.js 使用generateSharedAccessSignature将文件上载到Azure BlockBlog

Node.js 使用generateSharedAccessSignature将文件上载到Azure BlockBlog,node.js,azure,azure-storage,azure-node-sdk,Node.js,Azure,Azure Storage,Azure Node Sdk,这段代码过去一直有效。也许微软改变了它的工作方式 我的NodeJS服务器代码如下: const handler = async (req, res) => { const decoded = jwt.verify(req.body.token, secrets.JWT_SECRET) const container = req.body.kind const format = req.body.format const fileName = decoded.id + &qu

这段代码过去一直有效。也许微软改变了它的工作方式

我的NodeJS服务器代码如下:

const handler = async (req, res) => {
  const decoded = jwt.verify(req.body.token, secrets.JWT_SECRET)
  const container = req.body.kind
  const format = req.body.format
  const fileName = decoded.id + "_" + generateRandonChars(16) + '.' + format.toLowerCase()
  const blob = Azure.createBlobService(secrets.BLOB_ACCOUNT, secrets.BLOB_SECRET)
  const sharedAccessPolicy = {
    AccessPolicy: {
        Expiry: Azure.date.minutesFromNow(600),
        Start: Azure.date.minutesFromNow(0),
        Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.WRITE
    }
  }
  const sasToken = blob.generateSharedAccessSignature(container, decoded.id + "_" + fileName, sharedAccessPolicy);
  const uri= blob.getUrl(kind, fileName, sasToken)
  res.send(
    {
        successfully: true,
        data: uri
    }
  )
}
好的,这很有效,我收到的回复如下:

https://MyAzureStorage/TheContainer/filename.jpg?se=2020-10-23T21%3A18%3A12Z&sp=w&sv=2018-03-28&sr=b&sig=K4H4lS%2FnSJXvdtZ0Mbqo9ikSB114BhpY4sMh0r4YvJ4%3D

现在,这是我的JS代码:

const picUri = "https://MyAzureStorage/TheContainer/filename.jpg?se=2020-10-23T21%3A18%3A12Z&sp=w&sv=2018-03-28&sr=b&sig=K4H4lS%2FnSJXvdtZ0Mbqo9ikSB114BhpY4sMh0r4YvJ4%3D"
        var byteString = atob(myBase64File.split(',')[1])
        var ab = new ArrayBuffer(byteString.length)
        var ia = new Uint8Array(ab)
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i)
        }
        const blob = new Blob([ab], { type: contentType });
        const options =  {
            headers: {
              'Content-Type': 'application/octet-stream',
              'x-ms-blob-type': 'BlockBlob'
            }    
        }
        await axios.put(picUri, blob, options)
这段代码过去一直有效。据我所知,如果将容器设置为:Auth Method=Access Key,并将访问级别设置为Blob(仅限Blob的匿名读取访问),则不需要使用授权标头

有人能帮我吗

提前谢谢

<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. 
Make sure the value of Authorization header is formed correctly i. 
Including the signature.
RequestId:3e7bc5f3-501e-000c-6cfc-a92d50000000
Time:2020-10-24T11:53:19.5591962Z</Message>
<AuthenticationErrorDetail>Signature did not match. String to sign 
used was cw
2020-10-24T11:53:07Z
2020-10-24T21:53:07Z
/blob/MyAccount/MyContainer/10Igif74LgCmGka4.jpg



2018-03-28




</AuthenticationErrorDetail>
</Error>