Файлы Azure с NPM-хранилищем Azure не возвращают токен доступа
NPM Azure-Storage версия 2.10.3
Следующий код пытается создать токен SAS для существующего общего ресурса, каталога и файла. Код выполняется до завершения, но не возвращает токен.
Я использую console.log, чтобы увидеть, где он останавливается. Единственный журнал - первый: собирается генерировать токен.
Я строю класс, который успешно добавляет и удаляет файлы - эта часть работает. Просто получение токена SAS ничего не делает - оно не подведет - оно не преуспеет.
Почему это даже не ошибка? Как мне получить токен?
const azure = require('azure-storage');
try{
const connectionString = "xxx";
const share = "yyy";
const directory = "this-is-a-test";
const file = "short_en.mp3";
var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 100);
startDate.setMinutes(startDate.getMinutes() - 100);
const sharedAccessPolicy = {
AccessPolicy: {
Permissions: azure.FileUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
}
};
const fileService = new azure.FileService(connectionString);
console.log("about to generate token");
fileService.generateSharedAccessSignature(share, directory, file, sharedAccessPolicy, (error, result) => {
console.log("getting token response");
if(error) console.log(`result ${JSON.stringify(error)}`);
console.log(`result ${JSON.stringify(result)}`);
});
}catch(err){
console.log(`result ${JSON.stringify(err)}`);
}
2 ответа
Проблема в том, что я думал, что вызов API был асинхронным (с использованием await). Это не так - он возвращает объект напрямую. Я также нашел пример кода для форматирования дат начала и истечения срока действия. Вот правильный код.
const azure = require('azure-storage');
try{
const connectionString = "xxx";
const share = "yyy";
const directory = "this-is-a-test";
const file = "short_en.mp3";
var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 5);
var sharedAccessPolicy = {
AccessPolicy: {
Permissions: azure.FileUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
}
};
const fileService = new azure.FileService(connectionString);
console.log("about to generate token");
const accessToken = fileService.generateSharedAccessSignature(share, directory, file, sharedAccessPolicy);
console.log(`result ${JSON.stringify(accessToken)}`);
}catch(err){
console.log(`result ${JSON.stringify(err)}`);
}
accessToken выглядит так, сокращенное значение sig для безопасности:
"st=2019-07-25T18%3A39%3A41Z&se=2019-07-25T18%3A44%3A41Z&sp=r&sv=2018-03-28&sr=f&sig=C2k...NZgYA%3D"
Вы только включили чтение, это то, что вы хотите?
let startDate = new Date();
let expiryDate = new Date(startDate);
expiryDate.setFullYear(startDate.getFullYear() + 100);
startDate.setFullYear(startDate.getFullYear());
let sharedAccessPolicy = {
AccessPolicy: {
Permissions: azure.BlobUtilities.SharedAccessPermissions.READ + azure.BlobUtilities.SharedAccessPermissions.WRITE,
Start: startDate,
Expiry: expiryDate
},
};
Ваши даты в правильном формате?
Также обратите внимание на функции экспоненциального повтора в Azure.