在流星应用程序中将 base64 转换为 png

Convert base64 to png in meteor app

我有一个 meteor 应用程序,在这个应用程序中我得到了一个 base64 图像。我想将图像保存在 Digital Ocean 实例上,因此我会将其转换为 png 或其他图像格式并将其发送到服务器以获取图像的 url。 但是我没有找到能做到这一点的 meteor 包。

你知道我该怎么做吗?

BlobUrl,它对您来说是更好的选择吗?

将图像以 base64 或其他方式保存到服务器,然后当您在页面上查看图像时,生成它的 blobUrl。 url 仅在当时使用,防止其他人在各种网站上使用您的 url 并且不会使您的图像服务器超载 ...

我运行遇到了类似的问题。

运行 如下:

meteor npm install --save file-api

例如,这将允许服务器上的以下代码:

import FileAPI from 'file-api';
const { File } = FileAPI;

const getFile = function(name,image){
  const i = image.indexOf('base64,');
  const buffer = Buffer.from(image.slice(i + 7), 'base64');
  const file = new File({buffer: buffer, name, type: 'image/jpeg'});
  return file;
}

只需使用您喜欢的任何文件名调用它,并将 base64 字符串作为图像参数即可。

希望对您有所帮助。我已经测试过了,它可以在服务器上运行。我没有在客户端上测试过,但我不明白为什么它不起作用。

我使用 File System 中的 fs.writeFile 解决了我的问题。

这是我在客户端的 javascript 代码,我从插件中获得了一个 base64 图像 (img),当我点击我的保存按钮时,我这样做了 :

$("#saveImage").click(function() {
    var img = $image.cropper("getDataURL")
    preview.setAttribute('src', img);
    insertionImage(img);
});

var insertionImage = function(img){
    //some things...
    Meteor.call('saveTileImage', img);
    //some things...
}

在服务器端,我有:

Meteor.methods({
    saveTileImage: function(fileData) {
      var fs = Npm.require('fs');
      var path = process.env.PWD + '/var/uploads/';

      base64Data  =   fileData.replace(/^data:image\/png;base64,/, "");
      base64Data  +=  base64Data.replace('+', ' ');
      binaryData  =   new Buffer(base64Data, 'base64').toString('binary');
      var imageName = "tileImg_" + currentTileId + ".png";
      fs.writeFile(path + imageName, binaryData, "binary", Meteor.bindEnvironment(function (err) {
          if (err) {
                  throw (new Meteor.Error(500, 'Failed to save file.', err));
                } else {
                  insertionTileImage(imageName);
                }
        }));
    }
});


var insertionTileImage = function(fileName){
    tiles.update({_id: currentTileId},{$set:{image: "upload/" + fileName}});
}

因此,流星方法saveTileImage将base64图像转换为png文件并insertionTileImage上传到服务器。