Отправка файлов в Azure с использованием разрешений общего доступа с помощью nodeJS и веб-клиента или мобильного клиента
На моем портале Azure есть этот большой двоичный объект: Home / Storage accounts / my_blob_account / Blobs / users
Что я пытаюсь заархивировать: пользователь может загружать изображения в большой двоичный объект Azure. Он в основном вызывает сервер узла, чтобы сгенерировать 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)
}
это вернет 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%wChItGtUdjxwxfc8cjxfcjfcjxfcjxfcjxfcjxfcjxjxjxjxjxfczx 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 Время:2019-09-25T10:37:37.7337049Z
1 ответ
Вы создаете токен SAS с разрешениями READ:
Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.READ
Вы должны создать токен с правами WRITE:
Permissions: Azure.Constants.BlobConstants.SharedAccessPermissions.WRITE