Azure File Storage 基本用法 -- Azure Storage 之 File

Azure Storage 是微軟 Azure 雲提供的雲端存儲解決方案,當前支持的存儲類型有 Blob、Queue、File 和 Table。

筆者在《Azure Blob Storage 基本用法》中介紹了 Blob Storage 的基本用法,本文將介紹 File Storage 的主要使用方法。

文章來源:葡萄城產品技術社區

File Storage 是什麼?

Azure File Storage 是一個通過 Server Message Block (SMB) 協議提供雲端文件共享的服務。通過 File Storage 共享的文件,能夠被加載爲雲端或本地主機的磁盤,應用程序可以通過文件 API 像訪問本地文件一樣訪問這些文件。

下面是 File Storage 典型的應用場景:

  1. 輕鬆遷移那些有磁盤讀寫操作的應用到雲端。不用修改程序,只要通過 File Storage 加載相應的文件即可。
  2. 存放共享的應用程序配置文件。
  3. 存放日誌等應用程序診斷數據。
  4. 存放管理員的常用工具。

Azure File Storage的結構

下圖描述了 File Storage 的基本組織結構:

  • Azure Storage Account:

Storage Account 是用來管理 Azure Storage 的一個命名空間,主要用來控制存儲數據的訪問權限和計費。對 Blob、Queue、File 和 Table 這些 Azure 提供的存儲服務的訪問控制,都是通過 Storage Account 來進行的,所以要想使用 File Storage,需要先創建你的 Storage Account。

  • Share:

Share 是管理共享文件的單位,任何要共享的文件和目錄都必須屬於某個 Share。一個 Storage Account 下的 Share 數量是不受限制的,每個 Share 中可以存放任何數量的文件。但是每個 Share 中最多能存放5TB 的數據。

  • Directory:

與 Blob Storage 不同,File Storage 支持真正的文件目錄。你可以根據需要來創建目錄。

  • File:

File 是真正被共享的文件,每個文件最大 1TB。

  • URL format:

與 Blob Storage 相似,File Storage 中的每個文件都可以通過 URL 來訪問。URL 的詳細格式爲:

https://<storage account>.file.core.windows.net/<share>/<directory/directories>/<filename>

下面是個更真實的例子:

https://nickdemo.file.core.windows.net/demofiles/temp.txt

 

如果您還不熟悉 Azure Storage Account 的使用,以及如何通過 WindowsAzure.Storage 庫訪問 Azure Storage,請參考前文《Azure Table storage 基本用法》中的介紹,這裏就不重複了。

爲了方便查看 C# 代碼執行的結果,本文使用了 MS 發佈的一個 Azure Storage 客戶端工具:Microsoft Azure Storage Explorer,文中簡稱爲 Storage Explorer。下面是 File Storage 的一個截圖:

接下來我們通過 C# 代碼來介紹如何操作 File Storage。

創建 File Share

第一步我們先創建名爲“mylogs”的 Share:

//CloudStorageAccount 類表示一個 Azure Storage Account,我們需要先創建它的實例,才能訪問屬於它的資源。
//注意連接字符串中的xxx和yyy,分別對應Access keys中的Storage account name 和 key。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy");
//CloudFileClient 類是 Windows Azure File Service 客戶端的邏輯表示,我們需要使用它來配置和執行對 File Storage 的操作。
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
//CloudFileShare 表示一個 File Share 對象。
CloudFileShare share = fileClient.GetShareReference(shareName);
//如果不存在就創建 File Share。
share.CreateIfNotExists();

運行上面的代碼,然後打開 Storage Explorer,看到名爲 ”mylogs” 的 Share 已經創建了:

上傳文件

File Storage 支持真正的文件目錄。所以在上傳文件前需要確定要把文件上傳到哪個目錄下。每一個 File Share 都有一個根目錄,我們可以先取到這個根目錄,然後再創建子目錄或是直接上傳文件。下面的代碼會在根目錄下創建一個叫 “web”的子目錄,然後上傳文件 web.log 到 web 目錄中:

//獲得根目錄的引用。
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
//創建子目錄 "web" 的引用。
CloudFileDirectory webDir = rootDir.GetDirectoryReference("web");
//創建子目錄 "web"。
webDir.CreateIfNotExists();
//創建文件 "web.log" 的引用。
CloudFile cloudFile = webDir.GetFileReference("web.log");
string localFile = @"F:\temp\web.log";
using (var fileStream = System.IO.File.OpenRead(localFile))
{
    //上傳文件。
    cloudFile.UploadFromStream(fileStream);
}

在Storage Explorer 中檢查下結果:

 

複製文件

Azure Storage 支持在 Blob Storage 和 File Storage 之間相互複製文件,但這樣的操作涉及的訪問權限管理相對複雜一些。本文僅介紹文件在同一個 File Storage 中的複製操作。下面的代碼複製 web.log 文件並創建 web.copy.log 文件:

CloudFileShare share = GetFileShare(_currentShareName);
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory webDir = rootDir.GetDirectoryReference("web");
CloudFile cloudFile = webDir.GetFileReference("web.log");
if (cloudFile.Exists())
{
    //由 web.log 文件創建 web.copy.log 文件。
    CloudFile copyFile = webDir.GetFileReference("web.copy.log");
    copyFile.StartCopy(cloudFile);
}

 查看複製操作的結果:

設置 Share 的最大容量

前面我們提到每個 Share 中最多能存放5TB 的數據。但有時可能需要限制一下它的最大值,比如最多隻能存放1TB 的數據:

//指定最大容量爲 1024,單位是GB。
share.Properties.Quota = 1024;
share.SetProperties();

代碼很簡單,如果想要查看 Share 的最大容量是多少,直接取share.Properties.Quota 屬性的值就可以了。

 

現在我們在雲端有一個 1TB 大小的共享目錄,如何使用呢?

把 Share 映射爲本地機器的網絡硬盤

用管理員權限啓動 cmd.exe,執行下面的命令:

cmdkey /add:<storage-account-name>.file.core.windows.net /user:<storage-account-name> /pass:<storage-account-key>
net use z: \\<storage-account-name>.file.core.windows.net\mylogs

注意,請把上面命令中的 < storage-account-name > 和 < storage-account-key >進行替換。

再用非管理員權限啓動 cmd.exe,再執行一次net use 命令:

net use z: \\<storage-account-name>.file.core.windows.net\mylogs

如果不第二次執行 net use 命令,資源管理器中是看不到驅動器盤符的:

注意:一定要在防火牆 Outbound 規則中放行 SMB 協議使用的 TCP 445端口。

這就搞定了!看起來還不錯吧?

總結

雖然我們看到File Storage 和前文中介紹的Blob Storage 存在着很多相似的地方,但本質上它們是不一樣的。Blob Storage 本質上是一個個網絡上的文件,而 File Storage 則是通過 SMB 協議實現的網絡共享文件,能夠被操作系統映射成本地的磁盤是其最大特徵。也只有這一點才能讓應用程序通過文件操作API,完成對遠程文件的訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章