无法在 firebase 存储桶中创建文件夹 - firebase admin

Inz*_*lik 1 node.js google-cloud-storage firebase firebase-storage firebase-admin

就我而言,我有一个 Url 列表,我想从这些 url 下载每个文件并将其组织在 firebase 存储桶中,我的问题是我无法通过 nodejs javascript/typescript 在 firebase 存储桶中创建文件夹。

好吧,firebase storage 提供了 ref() 和 child 方法来上传子文件夹中的文件(请参阅this)但firebase只为firebase客户端库提供这些方法,并不是我们不能在nodejs中使用客户端库,而是他们隐藏了一些命名空间当您在 nodejs 中连接 firebase 客户端库并且存储是其中之一时(请参阅)。

我很高兴他们分别考虑了前端和后端,因为前端和后端在安全性和用例方面有完全不同的场景,所以他们真正编写在 nodejs 中使用的是 firebase admin,我看不到 ref 和 child 方法在他们所说的官方文档中,不是命名我正在上传的文件的任何其他方法,也不是任何使文件夹进入子目录的方法,当我从计算机上传文件时,它会以相同的名称保存在存储桶根目录中作为文件名,它在我的电脑中,即使我可以手动从 firebase 控制台创建文件夹,但它不能满足我的要求,肯定应该有任何方式以编程方式创建文件夹。

我也尝试使用 google 云存储库,const {Storage} = require('@google-cloud/storage'); 但结果证明 firebase admin 和 gogole 云库共享相同的文档,并且至少在上传文件部分具有相同的界面。

好吧,我花了一整天的时间(因为是凌晨 4 点 46 分,所以晚上也是如此)尝试不同的库并深入研究他们的文档,我也发现这些文档几乎没有组织和缺乏代码示例。

任何帮助将不胜感激,到目前为止我的代码片段来自他们的文档并正确上传文件:

import "firebase/firestore"

admin.initializeApp({
    credential: admin.credential.cert("./../path-to-service account-cert.json"),
    databaseURL: 'gs://bilal-assistant-xxxxx.appspot.com'
});
const quran_bucket = admin.storage().bucket("quran-bucket");

quran_bucket.upload("./my_computer_path/fatiha.mp3", {
    gzip: true,
    metadata: {
        cacheControl: 'public, max-age=31536000',
    }
}).then(uploadResponse => {
    console.log(` uploaded complete.`);
}).catch((reason: any) => {
    console.log("reason: ", reason);
})
Run Code Online (Sandbox Code Playgroud)

我想要的只是将音频文件保存在文件夹存储桶中,而不是存储在存储桶根目录中

Dou*_*son 7

根据 API 文档,upload()UploadOptions对象作为第二个参数。您将需要使用该destination对象的文档属性来指定存储中文件的名称:

quran_bucket.upload("./my_computer_path/fatiha.mp3", {
    destination: 'audio/juz30/fatiha.mp3',
    gzip: true,
    metadata: {
        cacheControl: 'public, max-age=31536000',
    }
})
Run Code Online (Sandbox Code Playgroud)

您可能不想打扰 mp3 的 gzip,因为它已经被压缩并且不会进一步压缩。