DataLakeFileClient中如何设置ContentMD5?
How to set ContentMD5 in DataLakeFileClient?
使用 Microsoft Azure 存储资源管理器上传到 Azure Data Lake 时,文件会自动生成并存储 ContentMD5 属性 的值。它还会在使用 Blob 绑定的函数应用程序中自动执行此操作。
但是,当从 C# DLL 上传时,这不会自动生成。
我想在以后使用这个值来比较文件。
我的上传代码很简单。
DataLakeFileClient fileClient = await directoryClient.CreateFileAsync("testfile.txt");
await fileClient.UploadAsync(fileStream);
我也知道我可以使用以下代码生成 MD5,但我不确定这是否与 Azure 存储资源管理器的生成方式相同。
using (var md5gen = MD5.Create())
{
md5hash = md5gen.ComputeHash(fileStream);
}
但我不知道如何将此值设置为文件的 ContentMD5 属性。
我找到了解决方案。
UploadAsync 方法有一个重载,它接受 DataLakeFileUploadOptions 类型的参数。此 class 包含一个 HttpHeaders 对象,该对象又具有一个 ContentHash 属性,将其存储为文档的 属性。
var uploadOptions = new DataLakeFileUploadOptions();
uploadOptions.HttpHeaders = new PathHttpHeaders();
uploadOptions.HttpHeaders.ContentHash = md5hash;
await fileClient.UploadAsync(fileStream, uploadOptions);
使用 Microsoft Azure 存储资源管理器上传到 Azure Data Lake 时,文件会自动生成并存储 ContentMD5 属性 的值。它还会在使用 Blob 绑定的函数应用程序中自动执行此操作。
但是,当从 C# DLL 上传时,这不会自动生成。
我想在以后使用这个值来比较文件。
我的上传代码很简单。
DataLakeFileClient fileClient = await directoryClient.CreateFileAsync("testfile.txt");
await fileClient.UploadAsync(fileStream);
我也知道我可以使用以下代码生成 MD5,但我不确定这是否与 Azure 存储资源管理器的生成方式相同。
using (var md5gen = MD5.Create())
{
md5hash = md5gen.ComputeHash(fileStream);
}
但我不知道如何将此值设置为文件的 ContentMD5 属性。
我找到了解决方案。
UploadAsync 方法有一个重载,它接受 DataLakeFileUploadOptions 类型的参数。此 class 包含一个 HttpHeaders 对象,该对象又具有一个 ContentHash 属性,将其存储为文档的 属性。
var uploadOptions = new DataLakeFileUploadOptions();
uploadOptions.HttpHeaders = new PathHttpHeaders();
uploadOptions.HttpHeaders.ContentHash = md5hash;
await fileClient.UploadAsync(fileStream, uploadOptions);