下面的代码会将文件上传到 Blob 存储
// intialize BobClient
Azure.Storage.Blobs.BlobClient blobClient = new Azure.Storage.Blobs.BlobClient(
connectionString: connectionString,
blobContainerName: "mycrmfilescontainer",
blobName: "sampleBlobFileTest");
// upload the file
blobClient.Upload(filePath);
但是如何上传所有文件并维护其文件夹结构呢?
我有 site
文件夹,其中包含所有 html 文件 + 图像 + css 文件夹以及网站的相关文件。
我想将完整的 site
文件夹上传到 blob 存储上,请建议方法。
最佳答案
请看下面的代码:
using System.Threading.Tasks;
using System.IO;
using Azure.Storage.Blobs.Specialized;
namespace SO71558769
{
class Program
{
private const string connectionString = "connection-string";
private const string containerName = "container-name";
private const string directoryPath = "C:\temp\site\";
static async Task Main(string[] args)
{
var files = Directory.GetFiles(directoryPath, "*.*", SearchOption.AllDirectories);
for (var i=0; i<files.Length; i++)
{
var file = files[i];
var blobName = file.Replace(directoryPath, "").Replace("\\", "/");
BlockBlobClient blobClient = new BlockBlobClient(connectionString, containerName, blobName);
using (var fs = File.Open(file, FileMode.Open))
{
await blobClient.UploadAsync(fs);
}
}
}
}
}
本质上,这个想法是获取文件夹中所有文件的列表,然后循环该集合并上传每个文件。
要获取 blob 名称,您只需在文件名中找到目录路径并将其替换为空字符串即可获取 blob 名称(例如,如果完整文件路径为 C:\temp\site\html\index.html
,那么 blob 名称将为 `html\index.html)。
如果您使用的是 Windows,那么您还需要将 \
分隔符替换为 /
分隔符,以便获得最终的 blob 名称 html/index .html
.
关于c# - 如何在blob存储中上传具有原始文件夹结构的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71558769/