/** * @fileoverview Google Cloud Storage (GCS) download module. */ const { Storage } = require('@google-cloud/storage'); const archiver = require('archiver'); const KEY_FILE_PATH = './keys/service-account.json' const storage = new Storage({ keyFilename: KEY_FILE_PATH}); // Load environment variables require('dotenv').config(); // バケット名を.envから取得する const BUCKET_NAME = process.env.BUCKET_NAME; console.log(`BUCKET_NAME: ${BUCKET_NAME}`); /** * GCStorageからファイルをダウンロードする * * @param {http.IncomingMessage} req * @param {http.ServerResponse} res */ const downloadFilesFromGCS = async (req, res) => { // バケットからファイル一覧を取得する const [files] = await storage.bucket(BUCKET_NAME).getFiles(); const filesToZip = files.map((file) => file.name); res.setHeader('Content-Disposition', 'attachment; filename="files.zip"'); res.setHeader('Content-Type', 'application/zip'); const archive = archiver('zip', { zlib: { level: 9 } }); archive.on('error', (err) => res.status(500).send({ error: err.message })); archive.pipe(res); for (const fileName of filesToZip) { const file = storage.bucket(BUCKET_NAME).file(fileName); archive.append(file.createReadStream(), { name: fileName }); } archive.finalize(); }; module.exports = downloadFilesFromGCS;