Google Driveへのファイルアップロードも試してみます。
- 参考記事
- Node.jsでGoogle Drive上のファイルを削除する (Google Drive API v3)
- Node.jsでGoogle Drive上のファイルをリネームする (Google Drive API v3)
- Node.jsでGoogle Drive上のファイルを指定フォルダに移動する (Google Drive API v3)
- Node.jsでGoogle Drive上のファイルを複製(copy)する (Google Drive API v3)
- Node.jsでGoogle Driveの指定フォルダからファイル一覧を取得メモ (Google Drive API v3)
- Node.jsでGoogle Drive上のファイルをダウンロードする (Google Drive API v3)
メソッドはFiles: createになります。
ライブラリの書き方だとdrive.files.create()
です。
.uploadではないので注意。
スコープ指定
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.appdata
フォルダを指定してアップロード
チュートリアルのfunction listFiles
の箇所を書き換えて利用してみます。
機能的には
function createFile
とかにリネームした方が良いでしょうが一旦動かす体なのでスルー
folderId
にGoogle Driveのアップロード先のフォルダのIDを指定しましょう。
パラメータでresource.parentsを指定していますが、ここが配列なので複数のフォルダに配置もできそうですね。
またtest.mp4
としてますが、ファイルの種類によって拡張子は変えてください。
create.js
//省略asyncfunctionlistFiles(auth){constdrive=google.drive({version:'v3',auth});constfileName=`test.mp4`;constfolderId='xxxxx';constparams={resource:{name:fileName,parents:[folderId]},media:{mimeType:'video/mp4',body:fs.createReadStream(fileName)},fields:'id'};constres=awaitdrive.files.create(params);console.log(res.data);};
実行すると手元のtest.mp4
が指定したGoogle Driveのフォルダにアップロードされます。
おまけ: プログレス表示
公式サンプルを参考にして書くとこんな感じになります。
dl.js
//省略constfileSize=fs.statSync(fileName).size;constres=awaitdrive.files.create(params,{onUploadProgress:evt=>{constprogress=(evt.bytesRead/fileSize)*100;readline.clearLine();readline.cursorTo(0);process.stdout.write(`${Math.round(progress)}% complete`);},});console.log(res.data);
- 実行
こんな感じのプログレス表示になります。
$ node create.js
・
・
・
mplete99% complete99% complete99% complete99% complete99% complete99% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete100% complete{id: 'xxxxxxxxxxxxxx'}
よもやま
res.data
のあたりでなんとく分かる人はいるかもしれないですが、こちらにコメントがあるようにaxiosを使ってアップロードしてるみたいですね。
そして公式ドキュメントがけっこうアップデートされていて公式のコード使えば良さそうってのに後から気づいた