如何用Python在HTML报告中创建ADLS中CSV文件的可下载链接
ADLS CSV文件在Databricks HTML报告中添加下载链接的实现方案
为什么直接用abfss链接无效
浏览器不支持abfss://协议,这是Azure内部服务间的专属访问协议,只有Databricks等Azure服务能解析,普通浏览器无法识别,所以直接写在HTML里的链接无法触发下载。
两种可行实现方法
方法一:生成临时SAS访问链接(推荐)
通过生成带权限的临时SAS URL,让浏览器能直接访问ADLS文件:
- 在Databricks Notebook中用Python生成SAS令牌和下载链接
from azure.storage.filedatalake import DataLakeServiceClient from datetime import datetime, timedelta # 替换为你的ADLS配置信息 account_name = "testingZone" account_key = "你的ADLS账户密钥" # 也可使用服务主体认证替代 file_system = "testingZone" file_path = "Test/Input/TestData.csv" # 初始化ADLS服务客户端 service_client = DataLakeServiceClient( account_url=f"https://{account_name}.dfs.core.windows.net", credential=account_key ) file_client = service_client.get_file_system_client(file_system).get_file_client(file_path) # 生成1小时有效期的只读SAS令牌 sas_token = file_client.generate_shared_access_signature( permission="r", expiry=datetime.utcnow() + timedelta(hours=1) ) # 拼接可直接下载的公开URL download_url = f"https://{account_name}.dfs.core.windows.net/{file_system}/{file_path}?{sas_token}" - 把生成的
download_url嵌入HTML报告,用displayHTML()渲染html_report = f""" <html> <body> <h2>数据报告</h2> <p>原始数据下载:</p> <a href='{download_url}' target="_blank" download="TestData.csv">点击下载CSV文件</a> </body> </html> """ displayHTML(html_report)
方法二:通过Databricks临时存储转发
如果不想暴露ADLS的SAS链接,可以把文件转到Databricks临时存储再提供下载:
# 读取ADLS中的CSV文件 df = spark.read.csv("abfss://testingZone@testingZone.dfs.core.windows.net/Test/Input/TestData.csv", header=True) # 保存到Databricks本地临时目录 temp_path = "/tmp/TestData.csv" df.toPandas().to_csv(temp_path, index=False) # 生成HTML下载链接 html_report = f""" <html> <body> <h2>数据报告</h2> <a href="files{temp_path}" download="TestData.csv">下载CSV文件</a> </body> </html> """ displayHTML(html_report)
注意事项
- SAS令牌的权限和有效期要按需设置,避免权限过大或长期有效带来安全风险
- 使用服务主体认证时,需给主体分配ADLS的
Storage Blob Data Reader权限 - 必须用Databricks的
displayHTML()函数渲染报告,才能在Notebook中正常显示可点击链接
内容的提问来源于stack exchange,提问作者Rag
相关产品推荐
相关产品推荐

