【问题标题】:Start downloading partial azure blob before it's completed在完成之前开始下载部分 azure blob
【发布时间】:2016-06-20 12:51:09
【问题描述】:

是否存在允许使用 C# api 的 blob(块、页面等)形式?机器 X 可能正在将文件上传到 azure blob 端点,机器 Y 正在实时读取文件。在我看来,块 blob 不起作用,因为您需要先放置块列表,然后才能查询它的 http 端点,但是有没有办法查询未提交的块并事先下载这些块?

实践中的一个例子是,用户机器与服务器握手,从服务器获取写入共享访问令牌和上传文件的权限。客户端 #1 机器开始上传 - 现在说,第二台客户端机器从服务器请求文件,但客户端 #1 尚未完成上传。在这种情况下,客户端 #2 将从服务器获取相关详细信息,以及只读共享访问令牌,然后在上传尚未完成的情况下开始读取文件。

【问题讨论】:

  • machine Y 会知道正在上传 blob 吗?你能用一个例子来描述你的要求吗?
  • @GauravMantri:我添加了一个具体的例子。
  • 您阅读过有关附加 blob 的文档吗?我认为一个设计良好的附加 blob 上传过程可以满足您的要求。
  • 谢谢。根据我对块 blob 的理解,我倾向于拒绝,但我想先自己尝试一下。将很快回复正确答案。关于附加 Blob,可以这样做,但附加 Blob 用于不同目的(存储日志等,其中始终附加最新内容),因此可能不适合所有用例。
  • @JackZeng:附加 blob 并没有真正的“结束”概念,它是永无止境的,但在这种情况下并非如此。客户端完成上传后,它将永远不会再次附加 - 我认为它不适合这个原因。我认为 Page Blob 和 Block Blob 都可以做到(尽管 Page Blob 可能更适合),我只是不确定如何实现它。请记住,在此过程中,服务器和两个客户端都可以相互通信。

标签: c# .net azure azure-storage


【解决方案1】:

对于Block Blobs,我认为无法在 blob 仍在上传的同时开始下载它。这仅仅是因为此时没有存储任何内容。为 blob 上传块时,Azure 存储只是将字节块存储在某个地方。

只有在您提交阻止列表时,Azure 存储才会通过在提交阻止列表操作中根据请求负载排列字节块来创建块 Blob。即使 Azure Storage lets to see the block list before it is committed,它也不会公开任何 API 来读取块的内容。

我不认为Page Blob 是您的场景中正确的 blob 类型(与 Append Blob 相同)即使在您编写页面时它在 blob 中提交并且其他调用者可以 get the page ranges 并开始下载存储在这些页面中的数据。但是,页面 blob 大小必须是 512 字节的倍数,并且并非您的应用程序中上传的所有文件都符合此要求。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2014-05-10
    • 1970-01-01
    • 2016-02-25
    • 2017-09-14
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多