通过 Databricks 上传到 Azure Blob 存储时设置内容类型

Set content type when uploading to Azure Blob Storage via Databricks

我正在使用 databricks 平台上传静态站点,具体使用以下命令将 html 内容推送到某个位置。

dbutils.fs.put("/mnt/$web/index.html", html, overwrite=True)

这是有效的,但 HTML 文件正在下载而不是显示。这是因为内容类型错误:Content-Type: application/octet-stream.

有什么方法可以使用 databricks 进行设置吗?

dbutils.fs.put 使用 DBFS 上的文件并且不“了解”底层实现细节,因为您可以挂载不同的东西 - S3、ADLSv1/v2 等。更改内容类型特定于 blob 存储 API,因此您需要在 Python(对于 )或 Scala 中实现代码,该代码将使用 API 来设置内容类型对于上传的文件,或上传文件并通过 API 设置内容类型,没有 dbutils.fs.put.

最后,这段代码对我有用。首先,我从 databricks 范围获取连接字符串为

dbutils.secrets.get(scope = "generic-scope", key = "website-key") 

如果没有,请在存储帐户的容器访问密钥中查找

from azure.storage.blob import BlobServiceClient, ContentSettings
connect_str="connectionString"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# Instantiate a ContainerClient
container_client = blob_service_client.get_container_client("$web")

# List files in blob folder
blobs_list = container_client.list_blobs()
for blob in blobs_list:
    print(blob.content_settings.content_type) # application/octet-stream
    blob.set_http_headers(
    content_settings=ContentSettings(
        content_type="text/html; charset=utf-8"
        )
    )