【问题标题】:Renew Sas for BlockBlob with Upload from Stream使用从流上传为 BlockBlob 更新 Sas
【发布时间】:2016-11-11 09:45:08
【问题描述】:

TL;DR; 使用 cloudBlockBlob.OpenWrite() 时需要更新 SAS?如果是,怎么做?

这是一个后续问题: Upload Big ZipArchive-MemoryStream to Azure

我设法使用blob.OpenWrite() 将 ZIP 存档上传到 Blob:

CloudBlockBlob blob = container.GetBlockBlobReference(SAS);
using (ZipArchive zArch = new ZipArchive(blob.OpenWrite(), ZipArchiveMode.Create))
{
    ZipArchiveEntry entry = zArch.CreateEntry("BigFile", CompressionLevel.Optimal);
    using (Stream stream = entry.Open())
    {
        SaveBigFileToStream(stream);
    }   
}

共享访问签名应该尽可能短暂

我现在的问题是,如何确保 SAS 不会过期? 上传是否只验证 SAS 一次?

【问题讨论】:

  • 这听起来并不难测试 :) 为什么不将它设置为 10 秒,看看会发生什么?您可以尝试这样做,同时等待看看是否有人知道他们头脑中的答案。
  • 好的,是的,这是个好主意 :) 但即使我知道我需要刷新它,我也不知道如何 ^^,但希望最好(我不需要续订 :) )

标签: azure azure-blob-storage signature


【解决方案1】:

您需要确保 SAS 在上传期间不会过期,因为将一个大文件上传到 Azure Blob 服务是由多个单独验证的 HTTP 请求组成的。

【讨论】:

  • 谢谢,很高兴知道。但是我将如何在 C# Azure-Api 中做到这一点,是否可以设置 SasEndpoint?或者我如何告诉正在上传的 Blob 他有一个新的 Sas?最好的问候弗洛:)
  • 如果您通过逐页放置来控制上传过程,您可以随时更新 SAS 并将新的 SAS 用于下一个请求。但是,如果只是简单地调用 UploadFile 或 UploadStream,则无法在中间更改 SAS。
  • 所以我必须更改上传程序?这意味着我不能再像我的代码示例中那样从流中上传?
  • 如果你真的想要这么短命的 SAS,是的,你必须自己重写上传过程,将块/页一一放置。你真的认为创建一个只有 1-2 小时生命周期的 SAS 是完全不可接受的吗?
  • 现在可以接受,但问题是上传可能需要更长的时间,这使得整个故事随着时间的推移有点不安全,所以我想避免它,但我想它是作为我目前的解决方案,不容易实现:D
猜你喜欢
  • 2014-11-22
  • 1970-01-01
  • 2014-08-28
  • 2012-09-15
  • 2022-01-17
  • 1970-01-01
  • 2020-03-14
  • 2014-07-13
  • 1970-01-01
相关资源
最近更新 更多