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
としてますが、ファイルの種類によって拡張子は変えてください。
//省略
async function listFiles(auth) {
const drive = google.drive({version: 'v3', auth});
const fileName = `test.mp4`;
const folderId = 'xxxxx';
const params = {
resource: {
name: fileName,
parents: [folderId]
},
media: {
mimeType: 'video/mp4',
body: fs.createReadStream(fileName)
},
fields: 'id'
};
const res = await drive.files.create(params);
console.log(res.data);
};
実行すると手元のtest.mp4
が指定したGoogle Driveのフォルダにアップロードされます。
おまけ: プログレス表示
公式サンプルを参考にして書くとこんな感じになります。
//省略
const fileSize = fs.statSync(fileName).size;
const res = await drive.files.create(params, {
onUploadProgress: evt => {
const progress = (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を使ってアップロードしてるみたいですね。
そして公式ドキュメントがけっこうアップデートされていて公式のコード使えば良さそうってのに後から気づいた