首页 > 解决方案 > Azure 数据湖 gen2 - 验证上传的文件(MD5?)

问题描述

我需要验证上传到 ADLG2 的文件,但找不到好方法...

有一个 ContentMD5 属性,但我看不出为什么要更改或更新它

即使我尝试获取文件的 HEAD,该属性也是不存在的 HEAD 标头响应 (即使在存储资源管理器中该属性存在) 存储资源管理器中的 属性列表

为什么要在 Azure 端自动生成它?或一些不同的方式来验证文件?(我不想上传文件然后下载并比较它们)

标签: azurerestazure-data-lakeazure-data-lake-gen2

解决方案


使用 REST API:

当您将文件上传到 azure 数据湖时,您只需 3 个步骤即可完成

  1. 放置 -> 在 ADL 中的正确位置创建文件
  2. Patch -> action=append ,您将数据添加到 blob
  3. Patch -> action=flush ,你保存 blob

验证您是否在第 2 阶段添加了您需要的所有数据

在标头中添加“Content-MD5”,并使用 base64 编码的 MD5 哈希

payload = "hello"
headers = {
'Content-Length': '5',
'Content-MD5': 'XUFAKrxLKna5cZ2REBfFkg==',
'Content-Type': 'text/plain'
}
  • 如果一切正常,您将收到状态:202
  • 如果 MD5 不正确,您将收到状态 400 - 请求中指定的 MD5 值与服务器计算的 MD5 值不匹配

之后,您想将 MD5 添加到文件(blob)属性“ContentMD5”中,您需要将 md5 base64 值添加到标题“x-ms-content-md5”中,以便下次读取文件时您可以验证内容

payload = {}
headers = {
'x-ms-content-md5': 'XUFAKrxLKna5cZ2REBfFkg=='
}

推荐阅读