2011-06-16 143 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

相关问题