【问题标题】:Download json file from firebase storage从 Firebase 存储下载 json 文件
【发布时间】:2021-02-05 14:50:05
【问题描述】:

让我重申我的问题。我有一个 vue.js 应用程序,可以将 json 文件上传到我的 firebase 存储中的存储桶中。我需要下载文件以在我的应用程序中使用,但是当我尝试从 firebase 存储下载 json 文件时,我收到“未捕获(承诺)未定义”错误。

我想做的是将文件下载回一个对象中以在我的应用程序中使用

这是我下载和读取文件的代码:

const storage = firebase.storage()
const storageRef = storage.ref()
const objectRef = storageRef.child('BUCKET/FILE_NAME.json')
objectRef.download(function (err, contents) {
    if (!err) {
        var jsObject = JSON.parse(contents.toString('utf8'))
        console.log('jsObject ', jsObject)
    }
})

更新:这是我的全部代码。我检查数据库是否有活动课程。如果找到,我想从存储中获取该课程并根据其内容构建我的对象。

getActiveCourse({ dispatch }, { cid, user }) {
    return new Promise((res, rej) => {
        let userActiveCourse = []
        let archivedUserCourses = []
        let currentCourseRef = db.collection('currentcourses')
        currentCourseRef = currentCourseRef.where('cid', '==', cid)
        currentCourseRef = currentCourseRef.where('user', '==', user.uid)
        currentCourseRef.get().then(snapshot => {
            if (!snapshot.empty) {
                snapshot.forEach(doc => {
                    let course = doc.data()
                    course.id = doc.id
                    if (course.status == 'active') {

                        // WE FOUND AN ACTIVE COURSE. NOW LETS DOWNLOAD IT AND READ IT INTO AN ARRAY
                        const storage = firebase.storage()
                        const storageRef = storage.ref()
                        const objectRef = storageRef.child('BUCKET/FILE_NAME.json')
                        objectRef.download(function (err, contents) {
                                 if (!err) {
                                     var jsObject = JSON.parse(contents.toString('utf8'))
                                 }
                             })
                        userActiveCourse.push(course.course)
                    } else {
                        archivedUserCourses.push(course.course)
                    }
                })
            }

        }).then(() => {
            dispatch('addUserActiveCourse', userActiveCourse)
            dispatch('addArchivedUserCourses', archivedUserCourses)

            res()
        }).catch(() => rej())
    })
},

【问题讨论】:

  • 如果您发现未捕获的错误并将其记录下来,它是否会显示实际出错的任何内容?
  • @FrankvanPuffelen 我试过了,但它永远不会成功
  • 你把错误的原因扔在这里了:.catch(() => rej())。那应该是.catch((err) => rej(err))
  • 谢谢@FrankvanPuffelen 现在我看到 objectRef.download 不是一个函数。关于如何解决这个问题的任何想法?

标签: javascript firebase vue.js google-cloud-storage


【解决方案1】:

启动 Firebase 项目的步骤

打开 Firebase 控制台。 点击“创建新项目”。

  1. “创建项目”窗口打开。
  2. Firebase 控制台的开始屏幕随即打开。
  3. “输入应用详细信息”屏幕随即打开。
  4. 按照屏幕上的说明继续配置。
  5. 创建项目后检查服务器密钥。
  6. 暂时记下服务器密钥并将其存储在本地驱动器上。

现在我们已经安装了依赖项并创建了一个 Firebase 项目,只需创建一个 index.js 文件并粘贴以下代码。不用担心,我们将详细检查代码,以了解发生了什么。

【讨论】:

  • 也许我没有正确写出我的问题。我不需要有关在 firebase 中创建项目的信息。我正在将 json 文件上传到存储中,然后我需要红色那个文件。
【解决方案2】:

这是其他需要帮助解决此类问题的人的解决方案。

const storage = firebase.storage()
const storageRef = storage.ref()
const objectRef = storageRef.child(course.storageRef)
objectRef.getDownloadURL().then((url) => {
    axios.get(url).then((response) => {
        let activeCourse = response.data
        userActiveCourse.push(activeCourse)
    })
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2019-12-10
    • 2017-08-22
    相关资源
    最近更新 更多