LoginSignup
12
8

More than 3 years have passed since last update.

Node.jsでGoogle Driveにファイルをアップロードする (Google Drive API v3)

Posted at

Google Driveへのファイルアップロードも試してみます。

メソッドは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を指定していますが、ここが配列なので複数のフォルダに配置もできそうですね。

参考: Create a file in a folder

またtest.mp4としてますが、ファイルの種類によって拡張子は変えてください。

create.js
//省略

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のフォルダにアップロードされます。

スクリーンショット 2020-08-26 2.22.53.png

おまけ: プログレス表示

公式サンプルを参考にして書くとこんな感じになります。

dl.js
//省略

    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を使ってアップロードしてるみたいですね。

そして公式ドキュメントがけっこうアップデートされていて公式のコード使えば良さそうってのに後から気づいた

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8