如何在 firebase 存储上上传多个文件并以 json 或 csv 文件的形式获取访问 url 和元数据?

时间:2021-04-29 08:30:53

标签: firebase google-cloud-firestore firebase-storage

作为一名 Android 开发者,这是一个让我感到困惑的问题。

我有大约 5000 个 mp3 文件,我想将它们添加到不同文件夹中的 Firebase 存储中。 到现在为止,我一直在从浏览器添加文件,只需将网址复制并粘贴到 firestore 中,然后在我的 android 项目中使用它们。

现在我需要上传这么多文件,我怎么才能得到

  1. 文件的网址 这真的很重要,我需要找到一种方法来获取上传文件的 url,我不想最终手动执行此操作。

  2. 文件的元数据,实际上只是持续时间。 如果这可以通过一些带有 firebase 的插件服务来实现,那么它会非常有用,或者我可以在我的计算机上运行一些第三方应用程序。

请帮忙。

2 个答案:

答案 0 :(得分:1)

一种可能的方法是使用 Cloud Function 生成签名网址并获取文件的元数据并将这些信息存储在 Firestore 文档中。

以下 Cloud Function 代码为上传到默认存储桶的每个文件创建一个 Firestore 文档,其中包含自动生成的 ID 和包含文件名的字段 fileName

exports.saveFileDetails = functions.storage.object().onFinalize(async object => {

    try {
        const bucket = admin.storage().bucket(object.bucket);
        const file = bucket.file(object.name);

        const signedURLconfig = { action: 'read', expires: '08-12-2035' };

        const signedURLArray = await file.getSignedUrl(signedURLconfig);
        const url = signedURLArray[0];

        const metadata = await file.getMetadata();

        return admin.firestore().collection('...').add({ signedURL: signedURLArray[0], metadata: metadata[0], fileName: object.name });

    } catch (error) {
        console.log(error);
        return null;
    }

});

请注意,您可以使用文件名值作为 Firestore 文档的 ID,如果您确定它跟在 constraints on document IDs 之后。

答案 1 :(得分:0)

要有效地执行此操作,您可以使用 admin-sdk 创建一个节点应用程序,该应用程序将读取指定文件夹的文件结构并在处理每个文件时记录输出。

NPM 包读取视频长度

用于管理 CSV 格式的 NPM 包