通过 nodeJS 和 Web 或移动客户端使用共享访问权限将文件上传到 Azure

Uploading files to Azure using Shared Access Permissions with nodeJS and a web or mobile client

在我的 Azure 门户上,我有这个 blob:Home / Storage accounts / my_blob_account / Blobs / users

我要存档的内容:用户可以将图像上传到 Azure Blob。 他基本上调用节点服务器生成一个 url 这样我就可以放文件了。

这是nodeJS代码:

export const generateBlobUrl = (format) => {
  const fileName = generateRandonChars(16) + '.' + format.toLowerCase()
  const blob = Azure.createBlobService(my_blob_account, BLOB_SECRET)
  const sharedAccessPolicy = { AccessPolicy: {
    Expiry: Azure.date.minutesFromNow(60),
    Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.READ
  }}
  const sasToken = blob.generateSharedAccessSignature('users', fileName, sharedAccessPolicy);
  return blob.getUrl('users', fileName, sasToken)
}

这将 return 变成 url 像 https://my_blob_account.blob.core.windows.net/users/h4KfK04GighEh8kb.png?se=2019-09-25T11%3A37%3A37Z&sp=r&sv=2018-03-28&sr=b&sig=uRtOdj8hBUGXxtX7BhXZzItnKilFq0t1zhwKYcAVFCY%3D

在客户端,我有这个:

RNFetchBlob.fetch('PUT', "the url that came from the nodeJS", {
        'Content-Type': 'application/octet-stream',
        'x-ms-blob-type': 'BlockBlob'
    }, RNFetchBlob.wrap("path to local file"))
        .then(r =>{
            console.log(r)
        })
        .catch(err =>{
            console.log(err)
        })

怎么了?我收到此错误:

AuthorizationPermissionMismatch此请求无权使用此权限执行此操作。 RequestId:63ce7eea-a01e-001c-298d-73cedd000000 Time:2019-09-25T10:37:37.7337049Z

您正在创建具有读取权限的 SAS 令牌:

Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.READ

您应该创建一个具有写入权限的令牌:

Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.WRITE