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

上传base64编码的jpeg到Firebase存储(管理SDK)

微生新翰
2023-03-14

我试图从我的移动混合应用程序(离子3)发送一张图片到我的Heroku后端(Node.js),并让后端将图片上传到Firebase存储,并将新上传的fil下载url返回到移动应用程序。

const uploadPicture = function(base64, postId, uid) {
  return new Promise((resolve, reject) => {
    if (!base64 || !postId) {
      reject("news.provider#uploadPicture - Could not upload picture because at least one param is missing.");
    }

    let bufferStream = new stream.PassThrough();
    bufferStream.end(new Buffer.from(base64, 'base64'));

    // Retrieve default storage bucket
    let bucket = firebase.storage().bucket();

    // Create a reference to the new image file
    let file = bucket.file(`/news/${uid}_${postId}.jpg`);

    bufferStream.pipe(file.createWriteStream({
      metadata: {
        contentType: 'image/jpeg'
      }
    }))
    .on('error', error => {
      reject(`news.provider#uploadPicture - Error while uploading picture ${JSON.stringify(error)}`);
    })
    .on('finish', (file) => {
      // The file upload is complete.
      console.log("news.provider#uploadPicture - Image successfully uploaded: ", JSON.stringify(file));
    });
  })
};
  1. 上载成功,但当我转到Firebase存储控制台时,当我试图显示图片的预览时出现错误,下载时无法从计算机打开它。我想这是一个编码的东西...?
  2. 如何检索新上传的文件下载url?我希望在.on('finish)中返回一个对象,就像在upload()函数中一样,但没有返回一个对象(文件未定义)。如何检索此url并将其发送回服务器响应?

我想避免使用upload()函数,因为我不想在后端托管文件,因为后端不是专用服务器。

共有1个答案

左丘涵畅
2023-03-14

我的问题是在base64对象字符串的开头添加了数据:image/jpeg;base64,;我只是不得不把它移除。

对于下载url,我执行了以下操作:

const config = {
        action: 'read',
        expires: '03-01-2500'
      };
      let downloadUrl = file.getSignedUrl(config, (error, url) => {
        if (error) {
          reject(error);
        }
        console.log('download url ', url);
        resolve(url);
      });
 类似资料:
  • Firebase Admin SDK文档清楚地说明,服务帐户对存储帐户具有完全的范围控制,但由于传输令牌源为nil,因此正确引导凭据似乎有些错误。

  • 在firebase storage的web sdk中,您可以从Blob数据上载图像。我有一个nodeJS应用程序,想将blob数据中的图像上传到我的存储桶中。在文档中,如果运行节点服务器环境,建议使用AdminSDK。但我在firbase存储管理文档中找不到此功能。 这是我的密码:

  • 我试图构建一个,它包括两个按钮,一个用于用相机拍照并上传到Firebase存储,另一个用于从Firebase存储下载图像并在上显示。 现在,我被上传功能卡住了。我可以把照片保存到应用程序目录中。我想上传保存的图片到Firebase存储。

  • 我有一个Base64编码的字符串(这是AES加密的字符串)。我正试图将它存储在Firebase存储,然后从它下载。 我尝试过多种选择,例如 这不会在存储中保留base64字符串,而是将其转换为整数。我还尝试提供{contenttype:“application/base64”},但是putString似乎不起作用。 我只是在寻找一个非常简单的base64编码字符串到firebase存储的上传和下载

  • 根据文档,我必须把文件名传递给函数才能上传一个文件。 我想能做这样的事