1

2 分以内に有効期限が切れる SAS トークンがあります。

SAS = AzureClient.GetCloudContainer().GetSharedAccessSignature(new SharedAccessPolicy()
{
    SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(1)
}, "readonly");
var sasCreds = new StorageCredentialsSharedAccessSignature(SAS);
CloudStorageAccount _storageAccount = AzureClient.GetCloudStorageAccount();
CloudBlobClient sasBlobClient = new CloudBlobClient(_storageAccount.BlobEndpoint, sasCreds);

CloudBlob sasBlob = sasBlobClient.GetBlobReference("blobname");

readonly はポリシー名です。

現在、次の操作を行っています。

using (BlobStream stream = sasBlob.OpenRead())
{                       
    using (FileStream fileStream = File.OpenWrite(@"Smething.txt"))
    {
        BlobStreamReader(stream,fileStream);
    }
}

private void BlobStreamReader(BlobStream blob,Stream OutputStream)
{
    int buffersize = 4194304; // 4MB 
    byte[] data = new byte[buffersize];
    do
    {
        int bytesRead = blob.Read(data,0,buffersize);
        if (bytesRead == 0) break;
        OutputStream.Write(data,0,bytesRead);
    }
    while (true);            
}

問題は、SAS の有効期限が切れたときにダウンロードが失敗することです。SASトークンは認証にのみ必要であり、ダウンロードが有効期限で開始された場合、SASの有効期限が切れてもダウンロードが続行されることを理解していました。

4

1 に答える 1

3

SAS トークンが認証にのみ必要であることは正しいです。ただし、あなたの場合、BlobStream は、サーバーからさらにデータが必要になるたびに新しいリクエストを発行します。各要求は個別に認証する必要があり、ダウンロード全体が完了する前に SAS トークンが期限切れになるため、失敗することが予想されます。

BLOB 全体をダウンロードしたい場合は、実際には DownloadToStream の方が優れた代替手段です。これは、サーバーに対して 1 つの要求のみを発行してから BLOB 全体をダウンロードするためです

于 2013-02-28T19:55:46.883 に答える