Cloud StorageのSDK(Node.js)でオブジェクトを操作してみた
はじめに
業務でCloudStorageを触る機会を頂いたので、SDK(Node.js)でオブジェクトを操作する方法をメモしました!
準備
- Node.jsをインストール
- 公式のインストーラを使用する場合、下記リンクからインストーラをダウンロードしてインストール
https://nodejs.org/en - Homebrewを使用する場合、下記コマンドを入力
brew install node
- 公式のインストーラを使用する場合、下記リンクからインストーラをダウンロードしてインストール
- Cloud StorageのSDKをインストール
npm install @google-cloud/storage
オブジェクト一覧取得
動作の確認のため、バケットを↓の状態に設定します
cloud-storage-sdk-sample/
├── sample_folderA/
│ ├── sample1.txt
│ ├── sample2.txt
│ └── sample_folderB/
│ └── sample3.txt
└── sample4.txt
オプションなし
BucketのgetFilesメソッドを利用することで、バケットからオブジェクトの一覧を取得することができます
const { Storage } = require("@google-cloud/storage");
async function getObjectListSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// オプションなし
const options = {};
const [files] = await storage.bucket(bucketName).getFiles(options);
files.forEach(file => {
console.log(file.name);
});
}
getObjectListSample().catch(console.error);
sample4.txt
sample_folderA/sample1.txt
sample_folderA/sample2.txt
sample_folderA/sample_folderB/sample3.txt
prefixオプション
プレフィックスで始まるオブジェクトのみを取得できるオプションです
const { Storage } = require("@google-cloud/storage");
async function getObjectListSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
const options = {
// sample_folderA/で始まるオブジェクトに絞り込む
prefix: "sample_folderA/",
};
const [files] = await storage.bucket(bucketName).getFiles(options);
files.forEach(file => {
console.log(file.name);
});
}
getObjectListSample().catch(console.error);
sample_folderA/sample1.txt
sample_folderA/sample2.txt
sample_folderA/sample_folderB/sample3.txt
delimiterオプション
指定した値で区切られたオブジェクトを仮想的にグループ化し、フォルダ構造のようにオブジェクトを取得できます
const { Storage } = require("@google-cloud/storage");
async function getObjectListSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
const options = {
// sample_folderA/で始まるオブジェクトに絞り込む
prefix: "sample_folderA/",
// sample_folderA/~/の間のオブジェクトに絞り込む
delimiter: "/",
};
const [files] = await storage.bucket(bucketName).getFiles(options);
files.forEach(file => {
console.log(file.name);
});
}
getObjectListSample().catch(console.error);
sample_folderA/sample1.txt
sample_folderA/sample2.txt
matchGlobオプション
Globパターンに一致したオブジェクトのみを取得できるオプションです
const { Storage } = require("@google-cloud/storage");
async function getObjectListSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
const options = {
// ...1.txtの名称を持つオブジェクトに絞り込む
matchGlob: "**/*1.txt"
};
const [files] = await storage.bucket(bucketName).getFiles(options);
files.forEach(file => {
console.log(file.name);
});
}
getObjectListSample().catch(console.error);
sample_folderA/sample1.txt
オプションの詳細は下記をご確認ください
オブジェクトのアップロード
Bucketのuploadメソッドを利用することで、バケットにファイルをアップロードできます
動作の確認のため、バケットを空に設定します
アップロードの確認用には↓のファイルを利用します
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
オプションなし
const { Storage } = require("@google-cloud/storage");
async function uploadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// アップロードファイル名
const filePath = "./sample1.txt";
// オプションなし
const options = {};
await storage.bucket(bucketName).upload(filePath, options);
console.log(`${filePath} uploaded to ${bucketName}`);
}
uploadFileSample().catch(console.error);
実行後のバケット
繧オ繝ウ繝励Ν繝�く繧ケ繝医〒縺吶�
繧オ繝ウ繝励Ν繝�く繧ケ繝医〒縺吶�
繧オ繝ウ繝励Ν繝�く繧ケ繝医〒縺吶�
繧オ繝ウ繝励Ν繝�く繧ケ繝医〒縺吶�
繧オ繝ウ繝励Ν繝�く繧ケ繝医〒縺吶�
destinationオプション
アップロード後の保存ファイル名を設定できます
const { Storage } = require("@google-cloud/storage");
async function uploadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// アップロードファイル名
const filePath = "./sample1.txt";
const options = {
// アップロード後のファイル名
destination: "sample_folderA/sample.txt",
};
await storage.bucket(bucketName).upload(filePath, options);
console.log(`${filePath} uploaded to ${bucketName}/${destFileName}`);
}
uploadFileSample().catch(console.error);
実行後のバケット
contentType
アップロードファイルのcontentTypeを設定できます
const { Storage } = require("@google-cloud/storage");
async function uploadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// アップロードファイル名
const filePath = "./sample1.txt";
const options = {
// contentTypeを設定
contentType: "text/plain; charset=utf-8",
};
await storage.bucket(bucketName).upload(filePath, options);
console.log(`${filePath} uploaded to ${bucketName}/${destFileName}`);
}
uploadFileSample().catch(console.error);
実行後のバケット
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
サンプルテキストです。
gzipオプション
trueに設定するとアップロード時にファイルをgzip圧縮できます
const { Storage } = require("@google-cloud/storage");
async function uploadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// アップロードファイル名
const filePath = "./sample1.txt";
const options = {
// contentTypeを設定
contentType: "application/gzip",
// アップロード時にファイルをgzip圧縮する
gzip: true,
};
await storage.bucket(bucketName).upload(filePath, options);
console.log(`${filePath} uploaded to ${bucketName}/${destFileName}`);
}
uploadFileSample().catch(console.error);
実行後のバケット
オプションの詳細は下記をご確認ください
オブジェクトのダウンロード
Bucketのdownloadメソッドを利用することで、バケットからファイルをダウンロードできます
動作の確認のため、バケットを↓の状態に設定します
cloud-storage-sdk-sample/
└── sample1.txt
サンプルテキストです。
オプションなし
オプションなしで実行すると、ダウンロード対象のデータがバッファとして返還されます
const { Storage } = require("@google-cloud/storage");
async function downloadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// ダウンロードファイル名
const srcFilename = "sample1.txt";
// オプションなし
const options = {};
const [contents] = await storage.bucket(bucketName).file(srcFilename).download(options);
console.log("File contents:", contents.toString());
}
downloadFileSample().catch(console.error);
File contents: サンプルテキストです。
destination
ダウンロード先のファイルパスを設定できます
const { Storage } = require("@google-cloud/storage");
const fs = require("fs");
async function downloadFileSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// ダウンロードファイル
const srcFilename = "sample1.txt";
const options = {
// ダウンロード先のファイルパス
destination: "./downloadedSample1.txt"
};
await storage.bucket(bucketName).file(srcFilename).download(options);
console.log(`Downloaded file contents: ${fs.readFileSync("./downloadedSample1.txt")}`);
}
downloadFileSample().catch(console.error);
Downloaded file contents: サンプルテキストです。
オプションの詳細は下記をご確認ください
オブジェクトの削除
Bucketのdeleteメソッドを利用することで、バケットのオブジェクトを削除することができます
実行前のバケット
const { Storage } = require("@google-cloud/storage");
async function deleteObjectSample() {
// Storageのインスタンスを作成
const storage = new Storage({ keyFilename: "./sample-sa-key.json" });
// バケット名
const bucketName = "cloud-storage-sdk-sample";
// 削除ファイル名
const fileName = "sample_folderA/sample1.txt";
await storage.bucket(bucketName).file(fileName).delete();
console.log(`${fileName} deleted from ${bucketName}`);
}
deleteObjectSample().catch(console.error);
実行後のバケット
オプションの詳細は下記をご確認ください
まとめ
今回は利用頻度の高そうな操作とオプションについて触ってみました。
アップロードメソッドのオプションで gzip圧縮したファイルはダウンロード時に自動でunzipしてくれるのが非常に便利に感じました。
ご覧いただきありがとうございました!
Discussion