簡體   English   中英

如何使用Node.js公開Azure文件存儲URL?

[英]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}`);
        });
      });
    });
  });
};

我發現您的代碼有兩個問題:

  1. 您的startDateexpiryDate相同,並且也設置為當前日期。 這將使您的sas令牌在創建后立即過期。 您應該將到期日期設置為將來的日期/時間值。
  2. 您在查詢字符串中包含了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM