GoogleDriveのAPIでハマった

  • このエントリーをはてなブックマークに追加

SlackにUploadされたファイルをGoogleDriveに自動で保存していくコードをRubyで書いていたのですが以下の現象が発生していました。
ちなみにZapier等を使わなかったのは、何かの必要な情報が取れなかったからです。(昔の事なので忘れた..)

現象: Googleドライブにアップロードしたファイルをブラウザからダウンロードした時、ファイル名に謎の拡張子がついてしまう。

例えば、sample.pngという名前でアップロードしているのにsample.png.fileという名前でダウンロードされます。

原因は以下のようなコードでした。
child_title=sample.png, local_file=tmp.file, mime=image/png としていました。
中身のコードを追っていないので適当な推測ですが、titleはファイル名にはなってくれますが、ダウンロードした時の拡張子はそのようになるわけではないっぽいです。
request_schemaの設定かmediaの設定あたり、何か足りていないのかしら..?(´・ω・`)

https://developers.google.com/drive/v2/reference/files/insert#request-body
によると、originalFilenameかしら?

require 'google/api_client'
require 'google_drive'

def make_gd_file(parent_id, child_title, local_file, mime)
file = @drive.files.insert.request_schema.new({
'title' => child_title,
'mimeType' => mime
})
file.parents = [{'id' => parent_id}]
media = Google::APIClient::UploadIO.new(local_file, mime)
result = @client.execute(
:api_method => @drive.files.insert,
:body_object => file,
:media => media,
:parameters => {
'uploadType' => 'multipart',
'alt' => 'json'
}
)
if result.status == 200
return result.data
else
puts "An error occurred(make_gd_file): #{result.data['error']['message']}"
return nil
end
end