如何更改chunk_size for Resumable Upload?

时间:2012-12-13 08:51:56

标签: google-api-ruby-client

我需要将一些大文件(大约1Gb)上传到谷歌硬盘。 我使用google-api-client(ruby)版本0.5.0:

media = Google::APIClient::UploadIO.new(file_name, mimeType, original_name)
result = client.execute!(
        :api_method => client.service.files.insert,
        :body_object => file,
        :media => media,
        :parameters => {
            'uploadType' => 'resumable',
            'alt' => 'json'})

我希望我的客户端在部件上拆分大文件并将这些部件上传到驱动器上。 但我在日志中看到,客户端只发送一个大块驱动器。 这是一个小的日志示例:

  

内容长度:“132447559”   内容范围:“字节0-132447558 / 132447559”

如何使用google-api-client上传大文件?

2 个答案:

答案 0 :(得分:0)

预期用途是尝试将文件上传到一个块中。总的来说,它更有效/更快。但是有些情况下优先使用分块,所以如果你因任何原因需要上传内容,只需设置chunk_size属性:

media = Google::APIClient::UploadIO.new(file_name, mimeType, original_name)
media.chunk_size = 1000000 # 1mb chunks
result = client.execute!(....)

答案 1 :(得分:0)

我正在使用API​​版本0.7.1,即使我知道我们现在应该使用0.9版本,因为旧版本与Google documentation上的Ruby示例匹配。

我不得不求助于在块中上传,因为我在httpclient库中遇到错误抱怨文件大小太大而无法转换为整数!

不幸的是,使用@stevebazyl对我来说不起作用,因为它只上传第一个块然后抛出TransmissionError。这似乎是在google-api-ruby-client代码中,特别是Google::APIClient方法中的execute!类。它似乎没有处理308的HTTP状态,这是可恢复的上载在需要下一个块时返回的状态。我这样做了代码:

when 200...300, 308
  result

(见api_client.rb

并使用#send_all类中的ResumableUpload方法,就像docs中的示例代码一样,它对我有用。所以除了@stevebazyl代码之外,我还有:

media = Google::APIClient::UploadIO.new(opts[:file], 'video/*')
media.chunk_size = 499200000

videos_insert_response = client.execute!(
  :api_method => youtube.videos.insert,
  :body_object => body,
  :media => media,
  :parameters => {
    :uploadType => 'resumable',
    :part => body.keys.join(',')
  }
)

videos_insert_response.resumable_upload.send_all(client)
相关问题