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

节点JS/Firebase Admin SDK/Firebase Storage-上载到Firebase Storage的base64映像未生成预览

呼延子安
2023-03-14

我正在尝试将从angular frontend接收的base64映像保存到firebase存储目录中。但由于某些原因,保存在firebase文件夹中的图像未生成预览。此外,在尝试检索图像文件时,我无法获取该文件的签名URL。

我正在使用Firebase admin-sdk生成桶引用-'storageRef'。

节点后端接收到的图像数据似乎很好,我使用在线base64解码器测试了相同的数据,并正确地重新生成原始图像。有人能告诉我这里出了什么问题吗?

exports.createContent = async(req, res, next) => {

  // Add a new document with a generated id.
  const writer = await db.collection('feeds').doc(req.body.language).collection(req.body.type).add({
  author: req.body.author,
  cat: req.body.cat,
  content: req.body.content,
  createdAt: admin.firestore.Timestamp.fromDate(new Date(req.body.createdAt)),
  excerpt: req.body.excerpt,
  lastEdit: admin.firestore.Timestamp.fromDate(new Date(req.body.lastEdit)),
  media: req.body.media,
  os_android: req.body.os_android === 'true' ? true : false,
  os_ios: req.body.os_ios === 'true' ? true : false,
  region: req.body.region,
  status: req.body.status,
  title: req.body.title,
  type: req.body.type
}).then((docRef) => {

  let bufferStream = new stream.PassThrough();
  base64EncodedImageString = req.body.imageSrc.replace(/^data:image\/\w+;base64,/, '');
  bufferStream.end(Buffer.from(base64EncodedImageString, 'base64'));

  var file = storageRef.file('thumbnail/' + req.body.type + '/' + docRef.id + '.png');
  //Pipe the 'bufferStream' into a 'file.createWriteStream' method.
  bufferStream.pipe(file.createWriteStream({
      metadata: {
        contentType: 'image/png',
        metadata: {
          custom: 'metadata'
        }
      },
      public: true,
      validation: "md5"
    }))
    .on('error', function(err) {
      console.log(err);
    })
    .on('finish', function() {
      res.json({
        message: "Feeds Added Successfully",
        feeds: docRef.id
      });
    });
})

};

共有1个答案

卞昀
2023-03-14

问题是,我在NodeJS中使用Firebase管理员SDK,我试图在代码中公开该文件,违反存储桶的访问规则。因此,我将公共访问密钥转换为false,并在上传时为该文件生成访问令牌。我在下面包含了我的工作代码。

var stream = require('stream');
const uuidv4 = require('uuid/v4');

const uuid = uuidv4();
let bufferStream = new stream.PassThrough();
var base64EncodedImageString = req.body.imageSrc.replace(/^data:image\/\w+;base64,/, '');
bufferStream.end(new Buffer.from(base64EncodedImageString, 'base64'));
    
var file = storageRef.file('thumbnail/' + req.body.type + '/' + docRef.id + '.png');
//Pipe the 'bufferStream' into a 'file.createWriteStream' method.
        bufferStream.pipe(file.createWriteStream({
          metadata: {
            contentType: 'image/png',
            metadata :{
              firebaseStorageDownloadTokens: uuid
           }
          },
          public: false,
          validation: 'md5'
        }))
        .on('error', function(err) {
          console.log(err);
        })
        .on('finish', function() {
          res.json({
            message: "Feeds Added Successfully",
            feeds: docRef.id
          });
        });
 类似资料:
  • 我无法上载firebase存储上的配置文件图像。我正在把烤面包片上的错误打印出来。为什么会出现这种情况?我无法解决这个问题,我审查了我的代码很多次。问题可能是什么?我如何调整我的代码以使其正常工作?提前向大家表示感谢。

  • 问题内容: 当我尝试删除目录时,FirebaseStorage始终返回错误,即类似以下内容始终返回错误。 但是,删除文件可以正常工作,例如不会返回错误: 我在这里可能做错了什么?我不认为FirebaseStorage不支持它,因为从目录中一个接一个地删除文件会很la脚(特别是如果所述目录有100或1000个这样的目录)。 问题答案: 从Google网上论坛删除目录是不可能的。您必须在某个位置(在F

  • 我正在尝试将容器的背景图像设置为来自资产的图像,如下所示: 但这将需要一些时间来加载和返回空白,同时屏幕直到图像加载。. 因此,我尝试在构建之前预加载图像,如下所示: 这返回了这个错误:

  • 我正在制作这个应用程序,用户可以有一张个人资料图片(但只有一张图片每人)。我得到了所有的设置,但当图片是2MB+时,它需要一些时间来加载,实际上我只需要图片是50KB左右(只有图片的小显示,最大40像素)。我做了一些代码将图像直接放入实时数据库(转换为画布并使它们成为一个7KB的base64字符串)。但是,这并不是真的干净,最好使用Firebase存储。 自从新的更新3.3.0以来,您可以使用pu

  • 从JS开始不是我的优势之一。在过去的几天里,我一直在尝试编辑这个JS函数,使其强制下载bas64图像。当点击下载按钮时,该函数的作用是打开一个带有图像的新窗口。然后用户必须右键单击并保存图片。我试图强制下载图像,而不是右键单击并另存为。 dataurl生成base4 png字符串(数据:image/jpeg;base64,/9j/4aaqskzjrgabaaqabaad/2wbdaaaebaqeb

  • 我将如何在节点中对S3上传进行存根。js? 为了获得洞察力,我使用摩卡进行测试,使用Sinon进行存根,但我愿意改变任何事情。我有一个文件,它导出一个执行上载的函数。看起来是这样的: 如果我尝试存根或AWS。S3。原型,没有任何变化。我假设这是因为我的测试需要本身,并且每个函数都有自己的副本。 我的测试是这样的: 这个测试工作正常,但它不会将上传存根到S3,因此上传实际上要经过:X。