[英]How to make Azure File Storage URLs public using Node.js?
當我嘗試訪問生成的URL時,出現一些標頭值錯誤。 基於其他相關問題 ,建議將共享訪問簽名附加到URL。 現在,當我嘗試訪問URL時,出現一些身份驗證錯誤。 我做錯了什么?
這是我嘗試過的:
export default (fileData) => {
let fileToUpload = `boleto.pdf`;
let shareName = `boleto-` + uuid.v1();
let directoryName = `boletos`;
let fileName = fileToUpload;
let startDate = new Date();
let expiryDate = new Date(startDate);
const fileService = storage.createFileService();
const sasToken = fileService.generateSharedAccessSignature(shareName, directoryName, fileName, {
AccessPolicy: {
Permissions: storage.FileUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
}
});
const sharedFileService = storage.createFileService(`DefaultEndpointsProtocol=https;AccountName=${process.env.AZURE_STORAGE_ACCOUNT};AccountKey=${process.env.AZURE_STORAGE_KEY};EndpointSuffix=core.windows.net`);
sharedFileService.createShareIfNotExists(shareName, (err) => {
if (err) throw new Error(err);
sharedFileService.createDirectoryIfNotExists(shareName, directoryName, (err) => {
if (err) throw new Error(err);
let nextDirectoryName = directoryName + `/` + directoryName + `01`;
fileService.createDirectoryIfNotExists(shareName, nextDirectoryName, (err) => {
if (err) throw new Error(err);
sharedFileService.createFileFromStream(shareName, directoryName, fileName, fileData.stream, fileData.buffer.length, (err, result, response) => {
if (err) throw new Error(err);
console.log(`FILE UPLOADED!`);
const url = sharedFileService.getUrl(shareName, directoryName, fileName);
console.log(`URL: ${JSON.stringify(url)}?sv=${sasToken}`);
});
});
});
});
};
我發現您的代碼有兩個問題:
startDate
和expiryDate
相同,並且也設置為當前日期。 這將使您的sas令牌在創建后立即過期。 您應該將到期日期設置為將來的日期/時間值。 您在查詢字符串中包含了sv
參數,因為sv
已經包含在sv
令牌中,所以不需要。
console.log( URL: ${JSON.stringify(url)}?sv=${sasToken}
);
請將此更改為以下內容:
console.log(`URL: ${url}?${sasToken}`);
此URL不應給您驗證錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.