gpt4 book ai didi

c# - 使用 GetSharedAccessSignature 下载大文件的 Azure

转载 作者:行者123 更新时间:2023-12-03 04:39:06 24 4
gpt4 key购买 nike

通过网页,我希望允许用户下载存储在 Azure 云存储上的(非常大的)文件。我使用 GetSharedAccessSignature 来允许用户下载它(注意:容器 protected 且不可公开读取)。我使用以下代码:

// get the file blob
// CloudBlockBlob blob set previously and check (it exists)

string sas = blob.GetSharedAccessSignature(
new SharedAccessPolicy() {
Permissions = SharedAccessPermissions.Read,
SharedAccessStartTime = DateTime.Now.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.Now.AddMinutes(54)
});

Response.Redirect(blob.Attributes.Uri.AbsoluteUri + sas);

除非下载时间超过 1 小时(正如我所说,通过不太好的互联网连接下载非常大的文件......),否则此方法有效。如果下载时间较长,则会发生超时,并且下载会在共享访问过期时间过后停止。

我该如何解决这个问题?

亲切的问候,罗比·德萨特

最佳答案

从代码来看,您似乎实际上是让浏览器进行下载。在这种情况下,我认为可以选择让共享访问签名的有效期更长。

另一个想法是让您的代码读取 blob 的 block ,然后传输这些 block 。这样,如果需要,您可以创建一个新的 SAS URI,并在 SAS URI 超时已过期且 Blob 尚未完全下载时使用它。

看看下面的示例代码。基本上在这个示例中,我有一个 200 MB 的 blob。在循环中,我的代码读取 Blob 的 1 MB block 并将该 block 向下发送。

        protected void ButtonDownload_Click(object sender, EventArgs e)
{
var blobUri = "http://127.0.0.1:10000/devstoreaccount1/abc/test2.vhd?sr=b&st=2012-08-17T10%3A29%3A46Z&se=2012-08-17T11%3A29%3A46Z&sp=r&sig=dn7cnFhP1xAPIq0gH6klc4nifqgk7jfOgb0hV5Koi4g%3D";
CloudBlockBlob blockBlob = new CloudBlockBlob(blobUri);
var blobSize = 200 * 1024 * 1024;
int blockSize = 1024 * 1024;
Response.Clear();
Response.ContentType = "APPLICATION/OCTET-STREAM";
System.String disHeader = "Attachment; Filename=\"" + blockBlob.Name + "\"";
Response.AppendHeader("Content-Disposition", disHeader);
for (long offset = 0; offset < blobSize; offset += blockSize)
{
using (var blobStream = blockBlob.OpenRead())
{
if ((offset + blockSize) > blobSize)
blockSize = (int)(blobSize - offset);
byte[] buffer = new byte[blockSize];
blobStream.Read(buffer, 0, buffer.Length);
Response.BinaryWrite(buffer);
Response.Flush();
}
}
Response.End();
}

希望这有帮助。

关于c# - 使用 GetSharedAccessSignature 下载大文件的 Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12003790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com