将文件上传到 Azure 文件存储
Upload file to Azure File Storage
我正在尝试将文件上传到我的 Azure 文件存储帐户。
这是我的代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("myConnString");
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("myFileStorage");
if (await share.ExistsAsync())
{
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("/folder1/folder2/");
CloudFile file = sampleDir.GetFileReference("fileName.jpg");
using Stream fileStream = new MemoryStream(data);
await file.UploadFromStreamAsync(fileStream);
}
我收到此错误:
The specified parent path does not exist.
这一行之后:
CloudFile file = sampleDir.GetFileReference("fileName");
file
有这个 uri:
https://myFileStorage.file.core.windows.net/myFileStorage/folder1/folder2/fileName.jpg
即正如预期的那样。
目前我的文件存储是空的,没有files/folders。如果我的自定义文件夹不存在,我该如何创建它们?
你可以利用CloudFileDirectory.BeginCreateIfNotExists
方法
如果您使用WindowsAzure.Storage, version 9.3.3并且只创建一个目录(没有子目录),您可以直接使用CreateIfNotExistsAsync()
方法创建一个目录。
但是你要记住一件事,对于文件共享,SDK 不支持创建包含子目录的目录,如你的 "folder1/folder2"。解决方案是一个一个地创建这些目录。
这是您案例的示例代码,创建一个包含子目录的目录:
static async void UploadFiles()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection_string");
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("file_share");
if (await share.ExistsAsync())
{
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
//define your directories like below:
var myfolder = "folder1/folder2";
var delimiter = new char[] { '/' };
var nestedFolderArray = myfolder.Split(delimiter);
for (var i = 0; i < nestedFolderArray.Length; i++)
{
rootDir = rootDir.GetDirectoryReference(nestedFolderArray[i]);
await rootDir.CreateIfNotExistsAsync();
Console.WriteLine(rootDir.Name + " created...");
}
CloudFile file = rootDir.GetFileReference("fileName.jpg");
byte[] data = File.ReadAllBytes(@"file_local_path");
Stream fileStream = new MemoryStream(data);
await file.UploadFromStreamAsync(fileStream);
}
}
测试结果=> 创建目录并将文件上传到 azure:
我正在尝试将文件上传到我的 Azure 文件存储帐户。
这是我的代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("myConnString");
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("myFileStorage");
if (await share.ExistsAsync())
{
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("/folder1/folder2/");
CloudFile file = sampleDir.GetFileReference("fileName.jpg");
using Stream fileStream = new MemoryStream(data);
await file.UploadFromStreamAsync(fileStream);
}
我收到此错误:
The specified parent path does not exist.
这一行之后:
CloudFile file = sampleDir.GetFileReference("fileName");
file
有这个 uri:
https://myFileStorage.file.core.windows.net/myFileStorage/folder1/folder2/fileName.jpg
即正如预期的那样。
目前我的文件存储是空的,没有files/folders。如果我的自定义文件夹不存在,我该如何创建它们?
你可以利用CloudFileDirectory.BeginCreateIfNotExists
方法
如果您使用WindowsAzure.Storage, version 9.3.3并且只创建一个目录(没有子目录),您可以直接使用CreateIfNotExistsAsync()
方法创建一个目录。
但是你要记住一件事,对于文件共享,SDK 不支持创建包含子目录的目录,如你的 "folder1/folder2"。解决方案是一个一个地创建这些目录。
这是您案例的示例代码,创建一个包含子目录的目录:
static async void UploadFiles()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection_string");
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare share = fileClient.GetShareReference("file_share");
if (await share.ExistsAsync())
{
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
//define your directories like below:
var myfolder = "folder1/folder2";
var delimiter = new char[] { '/' };
var nestedFolderArray = myfolder.Split(delimiter);
for (var i = 0; i < nestedFolderArray.Length; i++)
{
rootDir = rootDir.GetDirectoryReference(nestedFolderArray[i]);
await rootDir.CreateIfNotExistsAsync();
Console.WriteLine(rootDir.Name + " created...");
}
CloudFile file = rootDir.GetFileReference("fileName.jpg");
byte[] data = File.ReadAllBytes(@"file_local_path");
Stream fileStream = new MemoryStream(data);
await file.UploadFromStreamAsync(fileStream);
}
}
测试结果=> 创建目录并将文件上传到 azure: