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)
- Node.jsでGoogle Driveにファイルをアップロードする (Google Drive API v3)
メソッドはFiles: copyになります。
ライブラリの書き方だとdrive.files.copy()
です。
スコープ指定
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.appdata
https://www.googleapis.com/auth/drive.photos.readonly
Google Drive上のファイルのコピー
チュートリアルのfunction listFiles
の箇所を書き換えて利用してみます。
機能的には
function copyFile
とかにリネームした方が良いでしょうが一旦動かす体なのでスルー
folderId
にGoogle Driveのアップロード先のフォルダのIDを指定しましょう。
//省略
async function listFiles(auth) {
const drive = google.drive({version: 'v3', auth});
const params = {
fileId: `xxxxxxxxxxx` //ここにコピーしたいファイルのIDを指定
};
try {
const res = await drive.files.copy(params);
console.log(res.data);
} catch (error) {
return error;
}
};
実行すると指定したファイルがGoogle Driveのフォルダ同じフォルダ上でコピーされます。
別のフォルダにコピー
drive.files.copy()
をパッとみた感じフォルダのparents指定ができそうでした。
参考: https://github.com/googleapis/google-api-nodejs-client/blob/master/src/apis/drive/v3.ts#L4136-L4189
//省略
const params = {
fileId: `xxxxxxxxxxx`, //ここにコピーしたいファイルのIDを指定
requestBody: {
parents: [`xxxxxxxxxxx`] //ここにコピー先のフォルダIDを指定
}
};
//省略
これで元々のフォルダにファイルを残しつつ、別のファイルとして別のフォルダにファイルをコピーすることができます。
よもやま
.update()
で複数ペアレントを指定したり、ペアレントを削除したりすることでファイルの移動ができますが、この場合はコピーではなく同じIDのファイルを複数フォルダから参照している状態になります。
今回の.copy()
は全く別のファイルを作成する形です。
IDが異なるものができるので扱う際には違いの注意をしましょう。