Как загрузить файл в хранилище BLOB-объектов Azure, используя классический ASP? - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь загрузить файлы в хранилище BLOB-объектов Azure, используя классический ASP (без выбора!).Однако, хотя я могу использовать список содержимого контейнера, используя MSXML2.ServerXMLHTTP, я не могу создать большие двоичные объекты.Мне нужно использовать его для загрузки файлов PDF, поэтому я использую BlockBlob.

Мне кажется, я не могу правильно создать ключ авторизации.У кого-нибудь есть пример кода создания ключа авторизации в Classic 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 ]

3 голосов
/ 16 июня 2011

Вы должны будете реализовать эквивалент алгоритма, определенного здесь:

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

Однако есть более простой способ, который я рекомендую, если это возможно.Я бы попросил ваше приложение ASP сделать ASMX (или эквивалентный вызов WCF) приложению .NET, которое возвращает подпись общего доступа (SAS) с коротким сроком службы (например, с истечением 10 минут).Просто передайте имя PDF-файла, который вы загрузите, и попросите его вычислить подпись для вас с правами на запись.Получив подпись, вы можете просто ПОСТАВИТЬ ее, не беспокоясь о ее подсчете.Если PDF очень большой (> 64 МБ), у вас возникнет проблема, когда вам нужно беспокоиться о разбиении на блоки, но для небольших PDF-файлов вы можете выполнить очень простую операцию PUT на SAS, не беспокоясь об этом.

Код для этого тривиален:

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 голосов
/ 28 июня 2011

Вы можете загружать файлы в хранилище Azure, используя простое приложение C #. Пожалуйста, обратитесь по ссылке для более подробной информации. <<a href="http://tuvian.wordpress.com/2011/06/24/how-to-upload-blob-to-azure-using-asp-net-tool-for-upload-files-to-azure-using-asp-netc/" rel="nofollow">http://tuvian.wordpress.com/2011/06/24/how-to-upload-blob-to-azure-using-asp-net-tool-for-upload-files-to-azure-using-asp-netc/>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...