0

いくつかの大きなファイル (約 1Gb) を Google ドライブにアップロードする必要があります。私は 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'})

クライアントが大きなファイルをパーツに分割し、これらのパーツをドライブにアップロードすることを期待していました。しかし、ログを見ると、そのクライアントはドライブに 1 つの大きなチャンクしか送信していません。小さなログの例を次に示します。

Content-Length: "132447559" Content-Range: "bytes 0-132447558/132447559"

google-api-client を使用してチャンクごとに大きなファイルをアップロードするにはどうすればよいですか?

4

2 に答える 2

0

使用目的は、ファイルを 1 つのチャンクでアップロードしようとすることです。全体として、その方が効率的/高速です。ただし、チャンク化が望ましい場合もあるため、何らかの理由でアップロードをチャンク化する必要がある場合は、chunk_size プロパティを設定するだけです。

media = Google::APIClient::UploadIO.new(file_name, mimeType, original_name)
media.chunk_size = 1000000 # 1mb chunks
result = client.execute!(....)
于 2012-12-14T06:59:27.583 に答える
0

以前のバージョンは Google のドキュメントの Ruby の例と一致するため、現在バージョン 0.9 を使用することになっていることはわかっていますが、API バージョン 0.7.1 を使用しています。

ファイルサイズが大きすぎて整数に変換できないというエラーがhttpclientライブラリで発生していたため、チャンクでアップロードする必要がありました。

残念ながら、@stevebazyl を使用してもうまくいきませんでした。これは、最初のチャンクのみをアップロードしてからTransmissionError. これは google-api-ruby-client コード、具体的にはメソッドGoogle::APIClient内のクラスにあるexecute!ようです。HTTP ステータス 308 を処理していないようです。これは、次のチャンクが必要なときに再開可能なアップロードが返すものです。私はコードにこれをしました:

when 200...300, 308
  result

( api_client.rbを参照)

そして、ドキュメントのサンプルコードと同じようにクラスで#send_allメソッドを使用すると、うまくいきました。したがって、@stevebazyl コードに加えて、次のものがあります。ResumableUpload

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)
于 2016-06-15T23:36:22.827 に答える