我对C# azure sdk感到困惑。
我想达到的目标。
将文件从我的计算机上载到azure中的文件夹。
例如
当地
MyFiles
-- Folder1
-- file.txt
-- img.jpg
-- Folder2
-- file2.json
-- test.png
Azure结果
Container
MyFiles
-- Folder1
-- file.txt
-- img.jpg
-- Folder2
-- file2.json
-- test.png
所以我想在我的容器上的azure相同的文件结构。
我是怎么做的
var sasCred = new AzureSasCrdentials("sasurl");
var container = new BlobContainerClient(new Uri("containerUrl"), sasCred);
var allFiles = Directory.GetFiles("MyFilesFolderPath", "*", SearchOption.AllDirectories);
foreach(var file in files)
{
var cloudFilePath = file.Replace("MyFilesFolderPath", string.Empty);
var fullPath= $"MyFiles{cloudFilePath};
using(var s = new MemoryStream(File.ReadAllBytes(file))
{
await container.UploadBlobAsync(fullPath,stream);
}
}
这似乎做了我需要它做的事情,虽然我注意到文件类型是类似于“文件八位字节流”,而不是.json/.png/txt或任何它应该是。
当我搜索时,它谈到使用BlobCLient来设置文件类型,但现在我确定我是否应该使用BlobContainerClient。
2条答案
按热度按时间oprakyz71#
若要使用Azure Blob存储中的BlobContainerClient类设置容器中Blob的内容类型,可以使用SetBlobProperties方法并将BlobHttpHeaders类的ContentType属性指定为所需的内容类型。
也有nuget库可以从文件扩展名中获取mime类型,如果它们随上传而变化的话。
lnvxswe22#
在这种情况下,您需要同时使用
BlobContainerClient
和BlobClient
,您可以使用BlobContainerClient
和blob名称创建BlobClient
(具体为BlockBlobClient
)的示例,并在其中使用UploadAsync
方法。您的代码(未经测试)如下所示: