2017-03-03 14 views
2

私は流星のアプリケーションを持っています。この中で私はbase64画像を取得します。デジタルオーシャンインスタンスにイメージを保存したいので、pngなどのイメージフォーマットに変換してサーバーに送信し、イメージのURLを取得します。 しかし、私はこれを行う流星パッケージを見つけられませんでした。流星群のアプリケーションでbase64をpngに変換します

どうすればいいのですか?

答えて

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は、PNGファイルにbase64で画像を変換し、insertionTileImageサーバーにアップロードします。

0

BlobUrl、それはあなたのためのより良い選択肢でしょうか?

イメージをサーバーにbase64などで保存してから、イメージをページで表示しているときに、そのイメージのblobUrlを生成します。 URLはその時にのみ使用され、他の人があなたの画像サーバーに過負荷をかけずにさまざまなWebサイトであなたのURLを使用するのを防ぎます...

+0

実際、私はbase64でイメージを保存したくありません。私はpngやjpegのような古典的な画像フォーマットでサーバに保存したいと思っています。私はいつも動作するurlを持っていたいと思います。しかし、私はそれをpng形式でサーバーに保存する方法を知らない。 – Adrien

1

私は同様の問題に遭遇していました。

は、次のコマンドを実行します。

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文字列イメージパラメータ

こちらがお役に立てば幸いです。私はこれをテストして、サーバー上で動作します。私はクライアントでそれをテストしていないが、なぜそれがうまくいかないのか分からない。

+0

あなたの答えをありがとうが、私は別の方法で成功しました。私の答えを見てください。 – Adrien

関連する問題