当前位置: 首页 > 知识库问答 >
问题:

Firebase云存储错误加载预览已上传图像

王修为
2023-03-14

以下是我的上传代码

const uploadImage = async ({data, filename, uri}) => {
    const ext = uri.split('.').pop();
    const name = uri.split('/').pop();
    const path = `${user.uid}_${name}`;
    const storageRef = firebase.storage().ref(`profiles/${path}`);
    storageRef
        .putString(data, 'base64', {contentType: `image/${ext}`})
        .then(function (snapshot) {
            console.log('SUCCESSSSS');
        });
};
    useEffect(() => {
        ImagePicker.showImagePicker((response) => {
            //console.log('Response = ', response);

            if (response.didCancel) {
                console.log('User cancelled image picker');
            } else if (response.error) {
                console.log('ImagePicker Error: ', response.error);
            } else if (response.customButton) {
                console.log('User tapped custom button: ', response.customButton);
            } else {
                console.log(response.uri);
                uploadImage(response);

                setAvatar({uri: response.uri});
            }
        });
    }, []);

编辑:我将base64字符串复制到一个在线转换器中,看起来不错,它返回了正确的图像。看起来,数据没有问题。firebase的处理方式有问题。

编辑:我尝试显式地将类型设置为image/jpeg而不是image/jpg,如下所述:当Firestorage关闭时显示图像的正确方式,或者在Firestorage for iOS中加载预览时出错,但没有区别。

共有1个答案

邹高峻
2023-03-14

看起来有很多bug涉及到Firebase的bas64 putString方法和react-母语:请参阅以下线程:https://github.com/firebase/firebase-js-sdk/issues/576.我遵循了yonahforst的答案,最终使用了Blob。完美地工作。

复制在这里,以防线程消失:

function urlToBlob(url) {
  return new Promise((resolve, reject) => {
      var xhr = new XMLHttpRequest();
      xhr.onerror = reject;
      xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
              resolve(xhr.response);
          }
      };
      xhr.open('GET', url);
      xhr.responseType = 'blob'; // convert type
      xhr.send();
  })
}

如果不存在,请确保添加“数据:图像/jpeg;base64,9asdf92349…”。我使用的是react native image picker,所以它没有现成的功能。

const dataURL = 'data:image/jpeg;base64,' + data;
    urlToBlob(dataURL).then((blob) => {
        storageRef
            .put(blob)
            .then(function (snapshot) {
                const downloadURL = snapshot.ref.getDownloadURL().then((link) => {
                    console.log('link: ', link);
                    user.updateProfile({photoURL: link});
                });
            })
            .then(() => console.log('SUCCESS'));
    });
 类似资料:
  • 我最近开始使用firebase存储和firebase函数。现在我一直在开发从函数到存储的文件上传。 我已经开始工作了(上传完成,文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载): 我以为这是我代码中的一个错误。然而,如果我打开谷歌云平台-存储,图像就会出现,我可以打开它并预览它。 我做错了什么?下面是我使用的代码: 谢谢你的帮助

  • ,而当我上传相同的文件从上传文件选项从firebase UI然后它是预览罚款。Pls帮助我解决这个问题。

  • 我正在运行基于Firebase实时数据库和Firebase Storage的网络应用程序。 我需要通过Python google云存储库每小时将新图像上传到Firebase google bucket。这是文件。 我的图片上传代码(img_src路径正确): 图像似乎已成功上传,但在Firebase存储中手动查看时,图像不会加载。所有图像的规格看起来都是正确的。请将手动上传图像(加载良好)的规格与

  • 问题内容: Firebase存储在Firebase控制台中显示“错误加载预览” 最初,在上传和加载过程中,它在我的应用中运行良好。两天后,当我检查我的应用程序是否正常运行时。 Firebase控制台的屏幕截图: 我的图片上传代码: 我的图片加载代码: 如果您知道,请帮助我如何解决这个问题。 感谢Advance到Firebase专家 问题答案: 我刚刚就此问题通过电子邮件发送给Firebase团队。

  • 我有一个firebase帐户,我想以编程方式上传一些照片到firebase存储。为此,我使用了google cloud java storage API。我配置权限和其他权限。我可以成功地创建桶,斑点。然而,当我试图上传一张图片时,要么它的大小为0,要么它无法下载(不生成URL)。下面是我使用的代码; 任何建议都很感激。问候。

  • 我试图在Firebase存储中使用Firebase上传图像,但文件不能完全上传。它只显示图像的大小9字节,下载时无法预览。 这是我使用的代码:- 我使用的反应本地图像作物选择器。我使用Firebase,但不是反应本机Firebase。请帮助!