2011-06-16 128 views
1

我想使用傳統的ASP(無選擇!)上傳文件到Azure Blob存儲。不過,儘管我可以使用MSXML2.ServerXMLHTTP來列出容器內容,但我無法創建blob。我需要使用它來上傳PDF文件,所以我使用BlockBlob。如何使用傳統ASP將文件上傳到Azure Blob存儲?

我相信我無法正確創建授權密鑰。有沒有人有經典ASP VBScript中創建授權密鑰的代碼示例?我有類似下面的內容,但不知道如何在Classic ASP中生成密鑰。

' replace with your account's settings 
' setup the URL 
baseUrl = "https://<myaccount>.blob.core.windows.net" 

Set http = Server.CreateObject("MSXML2.ServerXMLHTTP") 
PathUrl = baseUrl & "/test/myblob" 
' setup the request and authorization 
http.open "PUT", PathUrl , false 
'How do I generate this key from the headers and path using HMAC-SHA256 and my prim/sec account key 
http.setRequestHeader "Authorization", "SharedKey <myaccount>:?????" 
http.setRequestHeader "Date", "2011-6-16 9:22" 
http.setRequestHeader "x-ms-date", "2011-06-16 9:22" 
http.setRequestHeader "x-ms-version", "2009-09-19" 
http.setRequestHeader "Content-Length", "11" 
http.setRequestHeader "x-ms-blob-type","BlockBlob" 
http.setRequestHeader "Content-Type", "text/plain; charset=UTF-8" 

postData = "hello world" 

' send the POST data 
http.send postData 

' optionally write out the response if you need to check if it worked 
Response.Write http.responseText 

我得到錯誤AuthenticationFailedServer未能驗證請求。確保授權標頭的值正確形成,包括簽名。

感謝

格雷姆

回答

2

你將不得不實行這裏定義的算法相當於:

http://msdn.microsoft.com/en-us/library/dd179428.aspx

但是,我建議如果可能的話更簡單的方法。我希望你的ASP應用程序向一個.NET應用程序做一個ASMX(或WCF等價調用),該應用程序返回一個壽命短的共享訪問簽名(SAS)(例如10分鐘到期)。只需傳遞您要上傳的PDF的名稱,並通過寫權限爲您計算簽名。一旦你有了簽名,你可以簡單地對它進行反擊而不必擔心計算任何事情。如果PDF非常大(> 64MB),那麼您將遇到一個問題,即需要考慮進入塊,但對於小型PDF,您可以在SAS上執行非常簡單的PUT操作,而無需擔心。

該代碼,這是微不足道的:

var blobName = "foo.pdf"; //taken from ASP app 

var blob = container.GetBlobReference(blobName); 

var sas = blob.GetSharedAccessSignature(new SharedAccessPolicy() 
{ 
    Permissions = SharedAccessPermissions.Write, 
    SharedAccessExpiryTime = DateTime.AddMinutes(10) 
}); 

在這種情況下,容器等。無論您希望用戶上傳。 'sas'變量將包含您需要發送的查詢字符串部分。你只需要追加它(例如blob.Uri.AbsoluteUri + sas)。

有了這個解決方案,您的ASP應用程序不知道Windows Azure blob存儲和細節,只有您的.NET應用程序需要知道密鑰或如何計算SAS。

+0

聽起來像一個很好的計劃。我不喜歡在ASP中執行計算。 – GraemeMiller 2011-06-16 16:18:37

相關問題