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

在Azure Data Lake Storage Gen2中设置Blob的TTL导致Blob损坏

解决Azure Data Lake Gen2设置TTL时文件损坏的问题

你的代码会损坏文件,核心原因是用了PUT请求且请求体为空——PUT操作在Azure Blob存储中是创建或替换整个Blob,空请求体直接覆盖了原文件内容,导致文件被清空成0或2字节,虽然TTL成功设置,但文件本身已损坏。

要修改Blob的TTL属性且不破坏文件内容,需用PATCH请求仅更新属性元数据,而非替换整个Blob。修正后的代码如下:

const setBlobTtlDays = async (containerName, blobPath, blobTtl) => {
    const blobUrl = await getFullBlobUrlWithToken(containerName, blobPath); // 包含SAS令牌
    await axios.patch(blobUrl, {}, {
        headers: {
            'x-ms-expiry-option': 'RelativeToNow',
            'x-ms-expiry-time': `${blobTtl}`
        }
    });
}

关键修改说明:

  • 替换axios.put为axios.patch:PATCH请求专门用于修改Blob的属性元数据,不会覆盖文件实际内容
  • 移除x-ms-blob-type头部:该头部仅在创建Blob时需要,修改属性阶段无需指定
  • 确认SAS令牌权限:需为SAS令牌授予Write或Update权限,否则无法修改Blob属性

如果需要设置绝对过期时间,可将x-ms-expiry-option改为Absolute,x-ms-expiry-time使用ISO 8601格式的时间字符串(例如2025-12-31T23:59:59Z)。

内容的提问来源于stack exchange,提问作者ibodi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:01