如何在 blob 存储中上传具有原始文件夹结构的文件?
how to upload files with its original folder structure in blob storage?
下面的代码会将文件上传到 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
。
下面的代码会将文件上传到 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
。