在块中发送文件总是在第10块崩溃

时间:2014-03-13 19:18:31

标签: ruby

我的超简单方法有一个奇怪的问题。它以4MB的块发送一个文件到外部API。事情是,总是在第10块,外国API崩溃。

调试API错误是不可能的,但它说:The specified blob or block content is invalid(该API是Azure存储API,但它现在并不重要,问题显然在我身边。)

因为它在第10个元素(第40个兆字节)崩溃,所以测试它并且“手动”调试它需要花费很多时间(部分原因是因为我糟糕的互联网连接速度),我决定分享我的方法

def upload_chunk()
  file_to_send = File.open('file.mp4', 'rb')

  until file_to_send.eof?
    @content = file_to_send.read 4194304 # Get 4MB chunk
    upload_to_api(@content) # Line that produces the error
  end
end

你能看到这个代码可能出错的东西吗?请记住,它总是第10次崩溃,适用于大小小于40 MB的文件。

1 个答案:

答案 0 :(得分:1)

我搜索了ruby "The specified blob or block content is invalid",发现这是第二个链接(首先是此页面):

http://cloud.dzone.com/articles/azure-blob-storage-specified

包含:

  

如果您通过将blob拆分为块来上传blob并且出现上述错误,确保块的块ID具有相同的长度。如果块的块ID是不同长度,你会得到这个错误。

所以我的第一个猜测是对upload_to_api的调用是从1-9分配id,然后当它变为10时id长度增加导致问题。

如果您无法控制id的生成方式,那么也许您可以将每次迭代读取的字节数设置为不超过文件总大小的1/9。