Azure blob首先写

时间:2018-01-04 22:19:00

标签: azure go azure-storage-blobs

这个用于编写blob块的official example有一个步骤,用于检查哪些块尚未提交:

    fmt.Println("Get uncommitted blocks list...")
    list, err := b.GetBlockList(storage.BlockListTypeUncommitted, nil)
    if err != nil {
        return fmt.Errorf("get block list failed: %v", err)
    }
    uncommittedBlocksList := make([]storage.Block, len(list.UncommittedBlocks))
    for i := range list.UncommittedBlocks {
        uncommittedBlocksList[i].ID = list.UncommittedBlocks[i].Name
        uncommittedBlocksList[i].Status = storage.BlockStatusUncommitted
    }

如果我正在创建一个肯定还不存在的blob(有多个块)。跳过该代码有什么问题吗?

代码如下:

    b := cnt.GetBlobReference(blockBlobName)
    err := b.CreateBlockBlob(nil)

    blockID := "00000"
    data := randomData(1984)
    err = b.PutBlock(blockID, data, nil)

    blockID2 := "00001"
    data2 := randomData(6542)
    err = b.PutBlock(blockID2, data2, nil)

    var uncommittedBlocksList []storage.Block
    uncommittedBlocksList = append(uncommittedBlocksList, 
        Block{
           ID:"00000"
           Status:BlockStatusUncommitted,
        },
        Block{
           ID:"00001"
           Status:BlockStatusUncommitted,
        },
    )
    err = b.PutBlockList(uncommittedBlocksList, nil)

1 个答案:

答案 0 :(得分:3)

  

如果我正在创建一个绝对没有的blob(有多个块)   但是存在。跳过该代码有什么问题吗?

绝对不是。您当然可以跳过用于获取未提交的阻止列表的代码。当您尝试上载blob并且它之间失败并且您想要从上一个失败的块恢复上载时,这种用于获取未提交列表的方案很有用。通过跳过此代码,您实际上是在告诉Azure存储放弃任何其他未提交的块,并使用块列表中指定的块来创建blob。