Ask Learn
Preview
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Microsoft Azure Storage 是 Microsoft Azure 平台上面提供永久性資料儲存服務,除了前一篇介紹的 SQL Database 之外,還有用於儲存檔案(正確地說是BLOB)的「Blob 儲存服務」,還有可以用來儲存 Key-Value 資料的「Table 儲存服務」,這篇文章將先針對「Blob 儲存服務」的使用來做介紹。
這一系列文章包括:
Microsoft Azure Blob 儲存服務主要是提供儲存大量的純文字或二進位的資料,在儲存體上的每一筆資料物件就好像檔案系統上的檔案一般。儲存在 Microsoft Azure Blob儲存體上的資料都可以透過URL存取(透過驗證或完全公開),並且擁有下列特性:
你的 PHP 應用程式不一定要放在 Microsoft Azure 上才能使用 Microsoft Azure Blob 儲存服務,由於能透過 RESTful Web Service 或是 Microsoft Azure SDK for PHP 的方式存取,即便是在自己的 hosting 上也可以使用,通常在下列幾種情況下較適合使用 Blob 儲存體服務:
Hosting環境的永久儲存空間有限或是根本沒有永久儲存空間
Microsoft Azure 網站服務在免費及共享方案下僅提供 1GB 的永久性儲存空間(基本方案 10GB、標準方案為 50GB),而 Microsoft Azure 雲端服務則是完全沒有永久性儲存空間,在這樣的狀況之下,都不建議應用程式假設執行環境中有個檔案系統可以直接操作,也就是要儲存不是放在資料庫中的資料就不應該使用檔案來處理,而是可以將它儲存在 Microsoft Azure Blob儲存服務這樣的雲端儲存平台。
而且把應用程式中關於檔案的操作抽離到雲端平台之後,執行環境變單純了,在部署到異質平台,或是要搬 hosting 時就會更方便了。
避免檔案下載大量吃掉網站頻寬
即使你覺得PHP應用程式執行環境有足夠的永久性儲存空間,但若你的應用程式裡許多檔案都放在同一個環境,而且是透過同樣的 domain 來下載,在用戶在下載大檔案吃掉輸出頻寬,或是同時下載大量檔案(如載入一個頁面時同時載入 CSS、JavaScript 或圖片檔案)佔掉過多的連線等等狀況都會對資源造成耗損,這時候把檔案放在 Microsoft Azure Blob 儲存體上,就可以有效減緩這些問題。
Microsoft Azure 團隊也提供了一套給 PHP 應用程式使用的 Microsoft Azure SDK,並且將此 SDK 的原始碼公開在 GitHub 上,同時可參考在該頁面上的說明來選擇安裝 SDK 的方法(Git、PEAR 或 Composer )。透過 SDK 來存取 Microsoft Azure Blob 儲存服務就不必自己處理 RESTful Web Service 的呼叫。
接下來的文章都會使用 SDK 的方式來操作 Microsoft Azure Blob 儲存服務。
在許多網頁前端加速的建議文章中,都會建議將網頁前端中會用到的靜態檔案(如:CSS、JavaScript、圖檔等非程式檔案)放在與網站不同的網域下(參考:High Performance Websites 的 Rule 8: Make JavaScript and CSS External 的例子),以增加瀏覽器平行下載的數量(因為瀏覽器針對單一網域會限制平行下載的數量)。
做法很簡單,可以在 Microsoft Azure Blob儲存服務中先建立一個公開存取的容器(container)
在 Microsoft Azure 管理後台中的儲存體可以直接建立容器(container)
可以根據需求建立公開或非公開的容器
這樣一來,若你的儲存體帳戶名稱叫 ericishandsome,那這個容器的 URL 會是:https://ericishandsome.blob.core.windows.net/assets/ ,放在該容器裡的資料(檔案)也就會follow 這個 URL,比方說在這這個容器下的 foo.js 資料,那它的完整 URL 便為:https://ericishandsome.blob.core.windows.net/assets/foo.js
而要把資料放在容器裡,除了可以用程式上傳(後面會介紹)之外,也可以使用一些工具來上傳檔案,比方說 Windows Azure Storage Explorer 是一個不錯 Microsoft Azure儲存服務的管理工具:
填入儲存服務的帳號還有管理金鑰(可於後台取得)即可操作
可以上傳下載刪除或修改檔案資料
如果網頁中要處理用戶上傳檔案,原本也許會使用像 move_uploaded_file 函式將上傳的檔案儲存至另一個檔案路徑,像是這樣:
這樣一來便可以透過 $path
的值來存取檔案,但如果我們想將上傳的檔案上傳到Blob儲存體,可以改寫成:
這樣一來,上傳後的檔案若容器是公開的,就可以透過 URL (根據儲存體帳號、容器名稱,以及上傳資料的名稱來決定)來存取該檔案。
如同前面所提過的,如果你的網站提供了下載檔案的服務,而不希望這些下載檔案的操作吃掉你 hosting 的頻寬,那麼可以運用 Blob 儲存體來處理。如果你有一些檔案已經存放在 Blob 儲存體上並不公開,而是希望使用者通過一些驗證機制再下載,那麼可以這麼做:
假設我們要讓使用者下載的 private blob URL 為 **https://ericishandsome.blob.core.windows.net/dl/foo.pdf**,因為是 private 用戶無法直接從這個 URL 直接存取,那產生 SAS 以及用戶可以下載到檔案的 URL 如下所示:
從上面這段程式碼的例子,雖然原本的資料不是公開直接存取,但我們產生了一個一小時內有效(可調整)的 SAS 作為 query string 暫時開放給用戶下載,這樣就能完成許多應用了。
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign in