8

Azure Blob Storage を使用してメディア ファイルを保存し、Shared Access Signatures を使用してこれらのファイルへのアクセスを提供しています。この点ですべてがうまくいっています。

ただし、これらのファイルへのアクセスを「再開」する必要があり、HTTP RANGE ヘッダーを使用してそれを行うクライアント アプリケーションがあります。このような要求を行うと、Azure から返される結果に満足できません。

Azure 側で詳細を表示して、要求が失敗したかどうか、またはクライアントが予期しないものを返しただけかどうかを確認する方法がわかりません。また、クライアントに対するデバッグの可視性もありません。

着信範囲ヘッダーは次のようになります。

RANGE: bytes=4258672-

私が読んだ Azure のドキュメントからは、RANGE ヘッダーをサポートしているように見えますが、RANGE と Shared Access Signature を一緒に使用すると競合が発生するのではないかと思っています。

更新: Azure が RANGE 要求に対して正しくないステータス コードを返している可能性があり、それが原因でクライアント アプリが応答を拒否しているようです。ドキュメントには、RANGE 要求に応答するときに Azure が HTTP ステータス コード 206 で応答すると記載されていますが、次のような RANGE 要求を発行すると、次のようになります。

curl -I -H "User-Agent: Bonos" -r 500- "https://murfie.blob.core.windows.net/168464/1.mp3?st=2013-07-03T16%3A34%3A32.4832235Z&se=2013-07-03T17%3A34%3A32.4613735Z&sr=b&sp=r&sig=mJgQGW%2Fr3v8HN2%2BVV3Uady7J68nFqeHyzQb37HAhfuE%3D"

Azure は次を返します。

HTTP/1.1 200 OK
Content-Length: 19988911
Content-Type: application/octet-stream Charset=UTF-8
Last-Modified: Fri, 07 Jun 2013 16:44:50 GMT
ETag: 0x8D031B57670B986
Server: Blob Service Version 1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 77312761-65a9-42ef-90cd-ff718a80b231
Date: Wed, 03 Jul 2013 16:41:01 GMT
4

4 に答える 4

8

これをまっすぐにしました。

@BrentDaCodeMonkey が述べたように、API バージョン 2011-01-18 以降を使用している場合、Azure は予想される 206 応答を返しますが、この場合は要求を発信していないため、要求ヘッダーを使用してこれを指定することはできません。

ただし、一部のマイクロソフトの友人は、ストレージ アカウントの API バージョンをグローバルに設定できるが、そのためには REST API を使用する必要があるという事実を教えてくれました (管理 UI では実行できません)。この投稿では、次の方法について説明します。

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

DefaultServiceVersion を 2011-01-18 に設定した後、RANGE リクエストに対して予想される 206 ステータスが返されます。

于 2013-07-18T14:57:16.983 に答える
4

Azure サービス API とトリッキーな承認に苦労している人には、非常に単純な方法でまったく同じことを行うこの非常に単純な C# スニペットをお勧めします (少なくとも私にとっては)。

        var credentials = new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("storagename", "storagekey");
        var account = new Microsoft.WindowsAzure.Storage.CloudStorageAccount(credentials, true);
        var client = account.CreateCloudBlobClient();
        var properties = client.GetServiceProperties();
        properties.DefaultServiceVersion = "2013-08-15";
        client.SetServiceProperties(properties);

nuget パッケージ WindowsAzure.Storage v9.3.3 を追加する必要があります (廃止されましたが、引き続き機能します)。

于 2016-12-20T21:59:50.733 に答える
2

私は製品チームの何人かのメンバーに連絡を取り、次のように伝えられました...

200 対 206 は、curl コマンドの「-I」フラグの存在によるものです。これにより、範囲ヘッダーが無視される「get blob」の代わりに、基本的に「get blob properties」呼び出しとしての GET ではなく HEAD 要求が発生します。また、"startByte-" 範囲形式は "x-ms-version:2011-08-18" 以降のバージョンでのみサポートされているため、バージョン ヘッダーを "x-ms-version:2011-08-18" 以降として指定してください。

範囲ヘッダーの詳細については、http: //msdn.microsoft.com/en-us/library/windowsazure/ee691967.aspxを参照してください。

于 2013-07-10T14:27:47.953 に答える