如何阅读 Azure Blob 网址?
Posted
技术标签:
【中文标题】如何阅读 Azure Blob 网址?【英文标题】:How to read Azure Blob Url? 【发布时间】:2021-09-15 20:10:18 【问题描述】:我正在创建 react 和 express/Azure SQL db 中的博客文章列表。我可以使用 Azure blob 存储来存储与帖子关联的图像。我还能够获取 blob url,并将其存储在我的 SQL 数据库中。但是,当我想直接读取 url 时,它抛出了一个找不到资源的错误。在搜索文档和其他 *** 答案后,我可以推断它与 SAS 令牌有关。谁能解释一下解决这个问题的更好方法是什么?
https://yourdomain.blob.core.windows.net/imagecontainer/yourimage.png
下面是nodejs代码。
router.post('/image', async function (req, res)
try
console.log(req.files.files.data);
const blobName = 'test' + uuidv1() + '.png';
const containerClient = blobServiceClient.getContainerClient(containerName);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient.upload(req.files.files.data, req.files.files.data.length)
res.send(tempUrl:blockBlobClient.url);
catch (e)
console.log(e);
)
【问题讨论】:
您的应用程序是否打算成为公共应用程序?或者您是否想让 blob 仅按需访问,例如当有人访问您应用程序上的特定页面时? @GauravMantri 我想选择第二个选项,即按需访问。 【参考方案1】:但是,当我想直接读取 url 时,它抛出了一个错误 找不到资源。
您很可能会收到此错误,因为包含 blob 的 blob 容器具有 Private
ACL,并且因此禁用了匿名访问。要启用匿名访问,请将 blob 容器的 ACL 更改为 Blob
或 Public
即可解决此问题。
如果您不能(或不想)更改 blob 容器的 ACL,其他选择是在 blob 上创建 Shared Access Signature (SAS)
。 SAS 本质上提供了对 blob 的时间和权限限制访问。根据您的需要,您需要创建一个仅具有 Read
权限的短期 SAS 令牌。
要生成 SAS 令牌,您需要使用 generateBlobSASQueryParameters
方法。创建 SAS 令牌后,您需要将其附加到 Blob 的 URL 以获取 SAS URL。
这是执行此操作的示例代码。它使用@azure/storage-blob
节点包。
const permissions = new BlobSASPermissions();
permissions.read = true;//Set read permission only.
const currentDateTime = new Date();
const expiryDateTime = new Date(currentDateTime.setMinutes(currentDateTime.getMinutes()+5));//Expire the SAS token in 5 minutes.
var blobSasModel =
containerName: 'your-blob-container-name',
blobName: 'your-blob-name',
permissions: permissions,
expiresOn: expiryDateTime
;
const sharedKeyCredential = new StorageSharedKeyCredential('your-storage-account-name', 'your-storage-account-key');
const sasToken = generateBlobSASQueryParameters(blobSasModel, sharedKeyCredential);
const sasUrl = blockBlobClient + "?" + sasToken;//return this SAS URL to the client.
【讨论】:
以上是关于如何阅读 Azure Blob 网址?的主要内容,如果未能解决你的问题,请参考以下文章