在meteor app中将base64转换为png

时间:2017-03-03 13:50:49

标签: javascript meteor base64

我有一个流星应用程序,在这一个我得到一个base64图像。我想将图像保存在Digital Ocean实例上,因此我会将其转换为png或其他图像格式,然后将其发送到服务器以获取图像的URL。 但我没有找到这样做的流星包。

你知道我怎么做吗?

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。

运行以下内容:

JSONModel

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

EmployeeModel

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

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

答案 1 :(得分:1)

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

这是我在客户端的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将其上传到服务器。

答案 2 :(得分:0)

BlobUrl,对你来说会更好吗?

在base64或其他任何地方将图像保存到服务器,然后在页面上查看图像时,生成它的blobUrl。该网址仅在此时使用,阻止他人在各种网站上使用您的网址,而不会使您的图片服务器超载......