2011-06-16 34 views
1

クラシックASPを使用してAzure Blobストレージにファイルをアップロードしようとしています(選択肢なし!)。しかし、私はMSXML2.ServerXMLHTTPを使用してコンテナの内容をリストすることができますが、私はブロブを作成することに失敗しています。私はBlockBlobを使用しているので、PDFファイルをアップロードするためにそれを使用する必要があります。Classic ASPを使用してAzure Blobストレージにファイルをアップロードするにはどうすればよいですか?

認証キーを正しく作成できないと思います。誰もクラシックASP VBScriptで認証キーを作成するコードサンプルを持っていますか?私は以下のようなものがありますが、クラシック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がリクエストを認証できませんでした。 Authorizationヘッダーの値が署名を含めて正しく構成されていることを確認します。

グレアム

答えて

2

おかげであなたはここで定義されたアルゴリズムと同等のものを実装する必要があります:

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

しかし、可能であれば私がお勧めという簡単な方法があります。私はあなたのASPアプリケーションに、短命(例えば10分の満了)の共有アクセス署名(SAS)を返す.NETアプリケーションにASMX(またはWCF等価呼び出し)をさせる。アップロードするPDFの名前を渡すだけで、書き込みアクセスであなたの署名が計算されます。署名を取得した後は、何も計算することを心配することなく、簡単にPUTすることができます。 PDFが非常に大きい場合(> 64MB)、ブロックに分割することを心配する必要がある問題がありますが、小さなPDFの場合は、SASで非常に単純なPUT操作を心配することなく実行できます。

このためのコードは簡単です:あなたは、ユーザーがアップロードしたいwhereeverこの場合

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ブロブストレージと詳細を認識せず、.NETアプリケーションのみがキーを知っているか、SASを計算する必要があります。

+0

いい計画のようです。私はASPで計算を実装することを夢見ていませんでした。 – GraemeMiller

関連する問題