0

Linux デスクトップからGDriveに大きなファイルをアップロードする際に問題があります(大きなアップロードの回復や監視さえも提供しない Grive を使用して)。

そこで、google-api-rubyを使用して小さなスクリプトを作成しようと思いつきました。

Google ドライブのドキュメントでは、再開可能なアップロードについて話しています– https://developers.google.com/drive/manage-uploads#resumable – 私はgoogle-api-rubyを使用して再開可能なアップロードを実装しようとしていて、クラスを見つけました。Google::APIClient::ResumableUpload

サンプルは、この ruby​​ish API がどのように機能するかの原則を理解するのに非常に役立ちますが、サンプルは、再開可能なアップロードの問題については触れていません。

ドキュメントが話している再開可能なアップロードに使用されるGoogle::APIClient::ResumableUploadクラスメントですか、それともこのRubyクライアントによって提供される便利なクラスですか?

Google::APIClient::ResumableUploadコンストラクターは、呼び出しまたは実行Google::APIClient::Result時に取得したを消費します! インスタンス上。executeGoogle::APIClient

私が理解している限り、メソッドはDiscovery APIexecuteに公開されている Google API メソッド( など) でのみ機能します。drive.files.insert

残念ながら、再開可能なアップロードは次の URI に関連付けられています。

https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable

まだディスカバリーの一部ではないか、「よりクリーンな」URIスキームに統合されていないようです(なぜupload/drive代わりにdrive/upload?)。

この API URI と組み合わせるために、この API URI のGoogle::APIClient 実行メソッドを使用することは可能ですか? または、自分で (たとえば、を使用して)再開可能なアップロードGoogle::APIClient::ResumableUploadを実装する必要がありますか?em-http-request

4

1 に答える 1

3

基本については、 files.insertの例を参照してください。その例ではマルチパートを使用していますが、再開可能への切り替えはかなり簡単です。ほとんどの場合、uploadType パラメータを「再開可能」に変更する必要があります。挿入/更新の結果には、コンテンツの送信/完了の確認に使用できるアップローダーへの参照が含まれます。

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

# Send content
result.resumable_upload.send_all(client)

クライアント ライブラリの今後のベータ リリース (いつでも :) では、プロトコルに関係なく、アップロードがもう少し均一に動作するように、これが少し変更されます。ほとんどの場合、execute() を呼び出すだけで十分であり、ファイルのアップロードが試行されます。しかし、既存の方法は引き続き機能します。次のように呼び出すだけで再開することもできます。

if !result.resumable_upload.complete?
   client.execute(result.resumable_upload) # Continue sending... 
end

例はエラー処理を示していませんが、result.resumable_upload.complete? を確認できます。または.expired? ステータスを確認します。未完了の再開可能なアップロードは、非アクティブな状態が一定時間 (約 1 時間程度) 続くと期限切れになります。期限切れになった場合は、最初からやり直す必要があります。

于 2012-10-02T00:18:07.460 に答える