Upload Zip file and unpack on the fly to Windows Azure Blob 上傳 Zip 壓縮檔並即時解壓縮檔案儲存到 Blob

上傳 Zip 壓縮檔並即時解壓縮檔案儲存到 Blob

為求方便(懶惰的做法XD),我直接借用小朱在 邊做邊學 Windows Azure 應用程式開發基礎 Part 2:開發 BLOB、Table 與 Queue 應用程式 一文中的例子來改寫。
code: Upload Zip file  and unpack on the fly to Windows Azure Blob

如圖中紅色框框:其中最大的不同是使用 DotNetZip 這個元件以資料的方式流來進行解壓縮 (on the fly),這方法有個好處,在解壓縮時可以越過 Windows 的檔案系統,不會產生實體檔案在硬碟上暫存。
將上載的檔案,利用 FileUpload.PostedFile.InputStream 這個屬性轉換為資料流,再由 DotNetZip 讀取。這時,輸出的每一個 ZipEntry 當然也是資料流。程式中,資料流的操作與實體檔案無異;差別在於儲存到 Blob 時,呼叫的方法不同。
另外,例子中,blob.UploadByteArray(ms.ToArray())、blob.UploadFromStream(ms) 二者皆可以達成目的,擇一即可。

這個範例程式在實際執行時,可能會遭遇到的一個問題 System.Web.HttpException 超出最大的要求長度。試問,該如何調整?
這是因為上載檔案太大,超過 4096KB 預設上限值所導致。
根據 MSDN 的說明:MaxRequestLength 屬性可用於防止因使用者張貼大型檔案至伺服器所造成的服務拒絕攻擊。要解除這個限制,可在 Web.config <System.Web> 段落中,覆寫 maxRequestLength 的值,
<System.Web>
   <httpRuntime maxRequestLength="10240" />
</System.Web>
如上設定,則 ASP.Net 允許上載 10MB 的檔案。

完整範例檔 BlobExample.aspx.cs.zip

Ref:
1. 邊做邊學 Windows Azure 應用程式開發基礎 Part 2
2. DotNetZip with Streams
3. HttpRuntimeSection.MaxRequestLength 屬性



===
補充:
設定本機測試的 Storage Service 時 ( dsinit /sqlinstance:. ),可能遇到 「provider: 具名的管線提供者,error: 40 - 無法開啟至 SQL Server 的連接」 的錯誤。此時,請檢查通訊協定中的 TCP/IP 是否有被啟動。接著,調整 TCP 通訊協定的 Port 值。
或是直接參考 這裡 有詳細的圖文教學。
或是 這篇 也可。

0 留言