programming
bunでGoogle Cloud Storageのファイルダウンロードができなかった
2025/3/23
bunGCS
正確に言うと @google-cloud/storage ライブラリの download 関数が機能しなかった。
// 省略
const file = await bucket.file(fileId);
await file.download({
destination: `tmp/${fileId}`,
});
雑に書くとこんなコードがあったんですけど、これが何故か動かなくて、download 関数が全く機能していないような挙動でした。
ので代わりに、
await new Promise((resolve, reject) => {
const file = await bucket.file(fileId);
const readStream = file.createReadStream();
const writeStream = fs.createWriteStream(`tmp/${fileId}`);
readStream.on("error", (err) => {
console.error(`Error reading ${file.name}:`, err);
reject(err);
});
writeStream.on("error", (err) => {
console.error(`Error writing ${file.name}:`, err);
reject(err);
});
writeStream.on("finish", () => {
console.log(`Finished downloading ${file.name}`);
resolve(null);
});
readStream.pipe(writeStream);
});
という感じで、stream で無理やりダウンロードするようにしました。
一応 bun 自体に S3 のクライアント機能があって、GCS もサポートされているようなので試してみたんですが、特定のディレクトリにあるファイル一覧を取得する、ということができなくて、今回は見送りました。