You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase v9使用uploadString上传后如何获取downloadUrl?

解决方案

Firebase v9 模块化SDK中,uploadString的返回值本身就是UploadTask对象,无需等待上传完成即可直接捕获;上传完成后需要调用独立的getDownloadURL方法获取文件公共访问地址。

完整实现示例

1. 同时获取UploadTask监听进度+上传完成后获取下载地址(then链式写法)

// 首先导入所需的模块化方法
import { getDownloadURL, uploadString } from "firebase/storage";

const message4 = 'data:text/plain;base64,5b6p5Y+344GX44G+44GX44Gf77yB44GK44KB44Gn44Go44GG77yB';
// 直接接收uploadString返回值即可得到UploadTask
const uploadTask = uploadString(storageRef, message4, 'data_url');

// 可通过uploadTask监听上传进度
uploadTask.on('state_changed', (snapshot) => {
  const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
  console.log('当前上传进度:' + progress.toFixed(2) + '%');
});

// 处理上传完成逻辑
uploadTask
  .then((snapshot) => {
    console.log('Uploaded a data_url string!');
    // 传入快照对应的存储引用,获取下载地址
    return getDownloadURL(snapshot.ref);
  })
  .then((downloadUrl) => {
    console.log('文件公共下载地址:', downloadUrl);
    // 此处可执行地址存储、资源展示等后续操作
  })
  .catch((error) => {
    console.error('上传或获取下载地址失败:', error);
  });

2. async/await 写法

import { getDownloadURL, uploadString } from "firebase/storage";

async function uploadStringAndGetUrl() {
  const message4 = 'data:text/plain;base64,5b6p5Y+344GX44G+44GX44Gf77yB44GK44KB44Gn44Go44GG77yB';
  try {
    const uploadTask = uploadString(storageRef, message4, 'data_url');
    // 如需监听进度可在此处添加uploadTask.on逻辑
    const snapshot = await uploadTask;
    const downloadUrl = await getDownloadURL(snapshot.ref);
    console.log('文件公共下载地址:', downloadUrl);
    return downloadUrl;
  } catch (error) {
    console.error('操作失败:', error);
  }
}

注意事项

  • getDownloadURL是模块化API的独立方法,使用前必须先从firebase/storage包导入
  • 获取到的DownloadURL是长期有效的公共访问地址,可直接用于前端资源加载、存储到数据库等场景

内容的提问来源于stack exchange,提问作者Yash Johri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:48:03