如何用Node.js在GCP Cloud Storage桶内创建空文件夹?
GCS创建空文件夹的正确方法
首先明确:Google Cloud Storage 没有真实的文件夹结构,所谓的"文件夹"都是通过对象的前缀(路径)来模拟的。要创建一个空"文件夹",实际上是创建一个名称以/结尾的空对象。
你的代码报错是因为bucket.upload()方法需要传入本地文件的路径,你传空字符串导致系统找不到对应文件,所以抛出ENOENT错误。
修正后的单文件夹创建代码
使用bucket.file().save()方法直接创建带/后缀的空对象,无需本地文件:
import { Storage } from '@google-cloud/storage'; const bucketName = 'my-bucket-101'; const storage = new Storage({ keyFilename: './key.json' }); const bucket = storage.bucket(bucketName); export async function addFolder(folderName) { // 构造文件夹路径,必须以/结尾 const folderPath = `categories/${folderName}/`; // 创建空对象模拟文件夹 await bucket.file(folderPath).save(''); console.log(`空文件夹 ${folderPath} 创建成功`); }
批量创建200个分类文件夹的示例
如果要批量创建200个,可以用循环+异步控制(避免并发过高):
export async function addBulkFolders() { const totalFolders = 200; // 可选:限制并发数,避免触发GCS请求频率限制 const concurrencyLimit = 10; let currentBatch = []; for (let i = 1; i <= totalFolders; i++) { const folderName = `category-${i}`; currentBatch.push(addFolder(folderName)); // 达到并发限制或循环结束时,等待当前批次完成 if (currentBatch.length === concurrencyLimit || i === totalFolders) { await Promise.all(currentBatch); currentBatch = []; } } console.log('200个分类文件夹全部创建完成'); }
关键说明
- 必须确保对象路径以
/结尾,否则GCS会把它当成一个普通文件,而不是文件夹前缀。 save('')写入空内容,这样就生成了一个大小为0的对象,用来模拟空文件夹。- 批量创建时建议控制并发数,避免超过GCS的请求配额(默认配额足够,但谨慎起见)。
内容的提问来源于stack exchange,提问作者Ninja-aman
相关产品推荐
相关产品推荐

