特定のファイルを更新する
ちょっと前、ファイルを Google Drive にアップロードした時は、同名のファイルがある場合でもアップロードが可能でした。
・・・可能でした、っていうか完全に不意打ちでしたが・・・
しかし、ファイルを更新したい時はどうすれば良いのでしょう?ってわけで、やりました。人生で初めて PATCH メソッド使いました。
URI のパラメータにファイル ID を利用していますが、だいたいはアップロードの時と同じ感じですね。
$target_fileid
で指定したファイルが更新されます。metadata の値を変えることで、ファイル名やmimeType を更新することも可能です。
#!/usr/bin/env perl use strict; use warnings; use HTTP::Request::Common; use JSON qw/encode_json/; use LWP::UserAgent; use URI::QueryParam; use URI; my $target_fileid = '1dZU7-4d52U2pRWsmMLhMEuh8Cpa0m8sI'; my $GOOGLE_DRIVE_UPLOAD_API = "https://www.googleapis.com/upload/drive/v3/files/"; my $ACCESS_TOKEN = ""; my $bearer = join ' ', ( 'Bearer', $ACCESS_TOKEN ); my $URI = URI->new( $GOOGLE_DRIVE_UPLOAD_API . $target_fileid ); $URI->query_param( uploadType => 'multipart' ); my $ua = LWP::UserAgent->new; my $res = $ua->request( PATCH $URI, 'Content-Type' => 'multipart/form-data', Authorization => $bearer, Content => [ metadata => [ undef, undef, 'Content-Type' => 'application/json;charset=UTF-8', 'Content' => encode_json( { # name => 'hogefuga.txt', # mimeType => 'plain/text', # parents => ['10kCqEUmWsWlqMdP_vF9pDGrQXFVZ-Lvr'], # id => $target_fileid, }, ), ], file => ["./hoge.txt"], ], ); print $res->code . "\n"; print $res->content . "\n"; # 200 # { # "kind": "drive#file", # "id": "19f2RrocH4I3Mdig0LkmNPghJDZnmq35f", # "name": "hoge.txt", # "mimeType": "plain/text" # }