我有一个SAS令牌,它将在2分钟后到期。
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");
只读政策名称。
现在我正在进行以下操作:
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过期,下载也会继续。
答案 0 :(得分:2)
只有身份验证才需要SAS令牌。但是,在您的情况下,BlobStream将在需要来自服务器的更多数据时发出新请求。由于每个请求都需要单独进行身份验证,并且您的SAS令牌在整个下载完成之前到期,因此预计会失败。
如果你想下载整个blob,DownloadToStream实际上是一个更好的选择,因为它只会向服务器发出一个请求,然后下载整个blob。