You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iframe中显示Azure Blob存储的PDF文档?

问题描述

我在Azure Blob存储中存储了大量PDF文档,希望通过iframe将指定PDF的URL嵌入网页,示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>iFrame PDF Example</title>
</head>
<body>
<h1>A PDF Document Embedded in a Web Page</h1>
<iframe src="https://azure.server/my-container/folder/my-document.pdf" width="100%" height="800px"></iframe>
</body>
</html>

该代码对Web托管的PDF有效,但使用Blob URL时出现错误:

ResourceNotFoundThe specified resource does not exist. RequestId:********-****-****-****-************ Time:2023-02-27T17:44:33.2977066Z

直接在浏览器打开该Blob URL也会出现相同错误,但Blob确实存在,且Azure UI中其内容类型为application/pdf。我已将容器访问级别设为公开(身份验证方式为Access key),且能生成容器的SAS令牌,但不知如何使用,请问该如何配置?

解决方案

一、先确认公开容器的配置细节

虽然你设置了容器为公开,但先排查几个容易踩坑的点:

  • 容器访问级别要选Blob(匿名读取对blob的访问),这个级别足够支持iframe嵌入;同时务必检查Blob URL格式是否正确:正确格式是https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob完整路径(含文件夹)>.pdf,很多错误是因为漏了.blob.core.windows.net这个后缀,或者存储账户名、容器名、Blob路径拼写错误。
  • 注意Azure Blob的文件名(包括文件夹路径)是区分大小写的,确认你用的URL和Blob实际名称完全匹配。

二、用SAS令牌实现授权访问

如果公开容器的方式仍有问题,或者你不想让容器完全公开,可以用SAS令牌来授权访问:

1. 生成符合要求的SAS令牌

在Azure门户生成SAS令牌时,注意这几个关键设置:

  • 选择Blob或容器级别(批量访问容器内Blob选容器级别更方便)
  • 权限只需要勾选读取即可(嵌入PDF不需要其他权限)
  • 设置合理的过期时间,避免令牌过早失效
  • 可选设置HTTPS仅访问、允许的IP范围来提升安全性

2. 拼接SAS令牌到Blob URL

生成SAS令牌后,直接把它拼在Blob URL的末尾,格式如下:

https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob路径>.pdf?<SAS令牌>

然后把这个完整URL填入iframe的src属性,示例代码:

<iframe src="https://mystorage.blob.core.windows.net/my-container/folder/my-document.pdf?sv=2022-11-02&ss=b&srt=sco&sp=r&se=2024-12-31T23:59:59Z&st=2023-03-01T00:00:00Z&spr=https&sig=xxxxxx" width="100%" height="800px"></iframe>

三、额外排查项

  • 再次确认Blob的内容类型确实是application/pdf,如果上传时没设置,可在Azure门户找到该Blob,进入“属性”页面修改内容类型。
  • 检查存储账户是否配置了防火墙或虚拟网络限制,如果有,需要将网页的访问IP加入允许列表,或者临时开启“允许从所有网络访问”测试是否是这个原因导致的访问失败。

内容的提问来源于stack exchange,提问作者W.P. McNeill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:23:43