Googleドキュメントの任意のコレクション配下にファイルをアップロードすべく,少々苦闘してしまいました。
まず,コレクションやサブコレクションの作成は,Google Documents List API のサンプル通りでうまくいきました。
次に,任意のコレクションへのファイルのアップロードなのですが,なかなかうまくいきませんでした。
ResumableUploader の完了イベントに渡ってくる引数の AsyncOperationCompletedEventArgs e には,下記のようにメンバーとして DocumentEntry があります。
static void OnDone(object sender, AsyncOperationCompletedEventArgs e) { DocumentEntry entry = e.Entry as DocumentEntry; }
Adding a resource to a collection に従って,アップロード完了したファイルの entry->Id を使用して,DocumentService->Insert でコレクションに移動しようとしましたが,全然うまくいきません。
「デリゲートのコンテキストではAPI呼べないのかな?」とか,「DocumentsRequest->Insertで出来ないかな?」とか,「そもそも ResumableUploader でアップロード先コレクションを指定できないのかな?」とあれこれ試しても,うまくいきません。
そのうち,デバッガで entry の中身を見てみると,ほぼ空っぽなことに気づきました。ごく一部のメンバーしか値が入っていないようなのです。なぜ?
そこで,一覧を取得しなおして,アップロードしたファイル名と比較して,一致した場合はコレクションに移動する,という処理を作成しました。
一応動作していますが,美しくないです。
4/22 追記
ファイル名で比較では,同一ファイル名が存在しうるので,その既存のファイルもコレクションに移動してしまうことに気がつきました。全然だめです。
よくよく検索したところ, Googleグループに回答そのものがありました。
手元のコードでは,以下のようにUploadUrlを指定することで,任意のコレクション配下にファイルをアップロードできるようになりました。
String^ s = gcnew String("https://docs.google.com/feeds/upload/create-session/default/private/full/" + parent->DocumentEntry->ResourceId + "/contents?conver=false");