将图像从 rest 端点保存到 firebase 存储不起作用,但可以从前端工作

Posted

技术标签:

【中文标题】将图像从 rest 端点保存到 firebase 存储不起作用,但可以从前端工作【英文标题】:Saving image from rest endpoint to firebase storage does not work but works from frontend 【发布时间】:2021-06-27 07:03:59 【问题描述】:

我有一个 React webapp,它获取图像,将其转换为 base64,然后将其发送到我的 REST 端点。

尝试将图像直接从前端保存到firebase storage 工作正常。

当我尝试从我的 REST 中保存它时,它会抛出:

[FirebaseStorageError [FirebaseError]: Firebase Storage: String does not match format 'base64': Invalid character found (storage/invalid-format)] 
  code: 'storage/invalid-format',
  customData:  serverResponse: null 

我这样初始化我的存储:

const firebaseStorage = () => 
  if (firebase.apps.length === 0) 
    firebase.initializeApp(config.firebaseConfig);
  

  return firebase.storage().ref();
;

我尝试像这样上传到存储:

const URI = `images/$uid/avatar`;
const ref = firebaseStorage().child(URI);
await ref.putString(image64, "data_url");

编辑

将 base64 图像转换为 Blob 并尝试通过 ref.put(blob) 将其保存到存储后,我收到以下错误:

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'byteLength' of undefined

【问题讨论】:

提供在服务器端获取image64 的方式。 @hoangdv 我在 POST 调用中将其作为字符串传递。如果我复制字符串服务器端并将其粘贴到 64 解码器中,我可以看到正确显示的图像。 尝试使用内容类型pref.putString(image64, "data_url", contentType: 'image/jpg') @hoangdv 我的图片是 jpeg 格式,即使我将 contentType 设置为 image/jpgimage/jpeg 它仍然无法正常工作并抛出同样的问题 我也尝试过剥离 base64 标头“data:image/jpeg;base64”并使用ref.putString(image64, "base64"),它仍然抛出相同的 【参考方案1】:

你试过 ref.putString(image64, 'base64url') 吗?

【讨论】:

以上是关于将图像从 rest 端点保存到 firebase 存储不起作用,但可以从前端工作的主要内容,如果未能解决你的问题,请参考以下文章

来自远程 REST API 的 Firebase 分析?

将相机图像上传到 Firebase

在颤动中将图像从图像选择器保存到firebase存储

如何将图像从 Firebase 存储显示到小部件中?

无法将图像从ImageView上传到Android中的FireBase存储

将 base64 编码图像保存到 Firebase 存储