Firebase存储未正确显示图像(显示一个小框)

qxsslcnc  于 2023-02-19  发布在  其他
关注(0)|答案(2)|浏览(125)

编辑:我已经更新了CORS配置,但它仍然显示相同的错误。
我的页面上有一个Tinymce RTE,当你把一个图片放到编辑器中时,我有一些函数可以把它上传到firebase的存储器中,然后用从firebase中获取的url替换掉文本编辑器的src。它工作起来还不错,但是它被显示为一个断开链接的图片图标。
当我检查链接时,这是因为最初它在点击链接时下载图像。我在它上传时添加了一个元数据属性,但现在它只显示一个小框。
下面是将放入编辑器的图像上载到firebase存储器的代码

const imagesUploadHandler = async (blobInfo, success, failure) => {
    try {
      const file = blobInfo.blob();
      const storageRef = ref(storage, file.name);
      const metadata = {
        contentType: 'image/jpeg',
      };
      
      await uploadBytes(storageRef, file, metadata);
      const url = await getDownloadURL(storageRef);
      console.log(url);
      return url;
    } catch (error) {
      // Call the failure callback with the error message
      console.log(error.message);
    }
  };

最初,我没有包括contentType元数据,它只是作为应用程序/八位字节流上传,我想这就是为什么它提示您保存图像。
图片链接https://firebasestorage.googleapis.com/v0/b/cloudnoise-news.appspot.com/o/ref.jpg?alt=media&token=1edc90e7-1668-4a06-92a3-965ce275798b
当前显示此x1c 0d1x
我查过一些东西

  • firebase存储规则处于测试模式,因此任何人都应该能够读取和写入。
  • 我试着插入不同的MIME类型,但它要么显示小框,要么显示“未定义”
  • 文件上传成功,Tinymce编辑器中的“交换”也很好。

知道为什么会这样吗?

vawmfj5a

vawmfj5a1#

您需要设置元数据标记

const metadata = {
  contentType: file.type,
};

这应确保在将图像上传到Firebase存储时设置正确的内容类型。
如果这样做不能解决问题,您可能需要检查从getDownloadURL返回的URL是否有效以及是否指向正确的图像。您可以尝试在新的浏览器选项卡中打开该URL,以验证该图像是否可访问。

cgvd09ve

cgvd09ve2#

我通过添加一个blob来修复它,我用文件数据创建了一个blob对象,然后我只是让它上传blob对象而不是单个文件。

const imagesUploadHandler = async (blobInfo, success, failure) => {
try {
  const file = blobInfo.blob();
  const storageRef = ref(storage, file.name);
  const metadata = {
    contentType: file.type,
  };
  
  // Create a new Blob object with the file data
  const blob2 = await new Blob([file], { type: file.type });
  
  // Upload the Blob to Firebase Storage
  await uploadBytes(storageRef, blob2, metadata);
  const url = await getDownloadURL(storageRef);
  console.log(url);
  return url;

} catch (error) {
  // Call the failure callback with the error message;;
  console.log(error.message)
}
  };

相关问题