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

如何使用Node.js将base64编码的图像(字符串)直接上传到Google云存储桶?

孙博艺
2023-03-14

目前,我正在使用@google-cloud/Storage NPM包将文件直接上传到Google云存储桶中。这需要一些技巧,因为我只有图像的base64编码字符串。我必须:

  • 解码字符串
  • 另存为文件
  • 将文件路径发送到下面的脚本以上传到Google云存储
  • 删除本地文件

我希望避免将文件存储在文件系统中,因为我使用的是Google App Engine,而且如果删除操作因任何原因无法工作,我不希望文件系统过载/将垃圾文件留在那里。这就是我的上传脚本现在的样子:

// Convert the base64 string back to an image to upload into the Google Cloud Storage bucket
var base64Img = require('base64-img');
var filePath = base64Img.imgSync(req.body.base64Image, 'user-uploads', 'image-name');

// Instantiate the GCP Storage instance
var gcs = require('@google-cloud/storage')(),
    bucket = gcs.bucket('google-cloud-storage-bucket-name');

// Upload the image to the bucket
bucket.upload(__dirname.slice(0, -15) + filePath, {
    destination: 'profile-images/576dba00c1346abe12fb502a-original.jpg',
    public: true,
    validation: 'md5'
}, function(error, file) {

    if (error) {
        sails.log.error(error);
    }

    return res.ok('Image uploaded');
});

是否可以直接上传图像的base64编码字符串,而不必将其转换为文件,然后使用路径上传?

共有1个答案

皇甫展
2023-03-14

我认为,解决方案是使用file.createWriteStream功能,该功能由bucket.upload函数包装在Google Cloud Node SDK中。

我对溪流的经验很少,所以如果这不起作用,请耐心等待。

首先,我们需要获取base64数据并将其放入流中。为此,我们将包含stream库,从base64数据创建一个缓冲区,并将该缓冲区添加到流的末尾。

var stream = require('stream');
var bufferStream = new stream.PassThrough();
bufferStream.end(Buffer.from(req.body.base64Image, 'base64'));

更多关于解码base64和创建流的信息。

然后,我们将该流传输到file.createWriteStream函数创建的写流中。

var gcs = require('@google-cloud/storage')({
  projectId: 'grape-spaceship-123',
  keyFilename: '/path/to/keyfile.json'
});

//Define bucket.
var myBucket = gcs.bucket('my-bucket');
//Define file & file name.
var file = myBucket.file('my-file.jpg');
//Pipe the 'bufferStream' into a 'file.createWriteStream' method.
bufferStream.pipe(file.createWriteStream({
    metadata: {
      contentType: 'image/jpeg',
      metadata: {
        custom: 'metadata'
      }
    },
    public: true,
    validation: "md5"
  }))
  .on('error', function(err) {})
  .on('finish', function() {
    // The file upload is complete.
  });

有关节点SDK中File.createWriteStream、文件文档、bucket.uploadbucket.upload方法代码的信息。

 类似资料:
  • 问题内容: 目前,我正在使用@ google-cloud / storage NPM软件包将文件直接上传到Google Cloud Storage存储桶。这需要一些技巧,因为我只有图像的base64编码的字符串。我必须: 解码字符串 将其另存为文件 将文件路径发送到以下脚本以上传到Google Cloud Storage 删除本地文件 我想避免将文件完全存储在文件系统中,因为我正在使用Google

  • 使用python sdk将JSON字符串(在内存中创建,而不是从文件中读取)上载到azure blob存储的最佳方式是什么? 我从医院的医生那里了解到https://pypi.org/project/azure-storage-blob/我可以通过执行以下操作将文件上载到azure blob存储。 但是我很难找到任何直接上传字符串的例子。 可以直接上传字符串吗?如果可以,在python中是如何完成

  • 问题内容: 我已经阅读了使用Google AppEngine将图像发送到Google云存储中的问题。 但是,答案中的代码表明文件将首先上传到Blobstore,因此文件不能超过32MB。 如何将大文件直接上传到Google Cloud Storage? 我已经检查了官方文档Upload Objects ,但是我仍然不知道如何编写表格来发布大文件。 问题答案: 从1.7.0开始 将直接上传到Goog

  • 问题内容: 昨天我做了一个深夜的编码会议,并创建了一个小的node.js / JS(实际上是CoffeeScript,但是CoffeeScript只是JavaScript,所以可以说是JS)应用程序。 目标是什么: 客户端(通过socket.io)将canvas datauri(png)发送到服务器 服务器将图像上传到亚马逊s3 步骤1完成。 服务器现在有一个字符串 我的问题是: 将数据“流” /

  • 问题内容: 我目前正在使用一个php应用程序将图像上传到Google云存储平台,但是,与在我的本地服务器上不同,我在确定如何使这项工作方面遇到了很大的麻烦。 这正是我想做的事情: 将图像的路径写入我的Google Cloud SQL 实际将图像上传到Google云存储平台 从保存的SQL路径编写一个调用图像的脚本,然后发布到我的网站 谁能指出正确的方向? 谢谢! 问题答案: 像这样的事情对我来说适