如何使用React在Firebase中保存上传的文件URL

时间:2019-05-07 09:12:12

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

我是React Redux Firebase的新手。我想上传文件并将URL保存在数据库中。我可以将文件保存到存储中,但是无法保存网址。

任何答案将不胜感激!

在按钮上单击我具有以下代码。

handleSubmit = (e) => {
    e.preventDefault();
    const { sp_License } = this.state;
    const Lfilename = this.state.sp_name + '_' + new Date().getTime();
    const uploadTask = storage.ref('License/' + Lfilename).put(sp_License);
    uploadTask.on('state_changed',
        (snapshot) => {
            //progress 

        },
        (error) => {
            //error

        },
        () => {
            uploadTask.snapshot.ref.getDownloadURL().then(
                url => this.setState({ License: url })

            );
            console.log(this.state);
            this.props.createDroneSP(this.state)
        });

}

1 个答案:

答案 0 :(得分:1)

应该使用on()方法,该方法“表现得像一个Promise,并在上传完成时解析其快照数据”,而不是使用设置侦听器的then()方法。

因此,您应该按照以下步骤修改代码:

handleSubmit = (e) => {
    e.preventDefault();
    const { sp_License } = this.state;
    const Lfilename = this.state.sp_name + '_' + new Date().getTime();
    const uploadTask = storage.ref('License/' + Lfilename).put(sp_License);
    uploadTask
    .then(uploadTaskSnapshot => {
        return uploadTaskSnapshot.ref.getDownloadURL();
    })
    .then(url  => {
        this.setState({ License: url });
        console.log(this.state);
        this.props.createDroneSP(this.state)
    });    

}