Node.js 使用generateSharedAccessSignature将文件上载到Azure BlockBlog
这段代码过去一直有效。也许微软改变了它的工作方式 我的NodeJS服务器代码如下: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
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>