6

Node.js/Express.jsバックエンドにアップロードする次のコードがあります。

var reader = new FileReader();
reader.readAsDataURL(file);

reader.onload = function (e) {
  var result = http.post('/files', e.target.result);
  result.success(function () { 
    alert('done'):
  });
}

私のルートは次のようになります:

app.post('/files', function (req, res) {
  var cws = fs.createWriteStream(__dirname + '/media/file');
  req.pipe(cws);
  res.send('success');
});

画像アプリで/media/ fileを開くと、読み取れないという警告が表示されます。テキストエディタで画像ファイルを開くと、base64でエンコードされた文字列が内部に表示されます。デスクに書き込む前に、最初に文字列を変換する必要がありますか?

4

1 に答える 1

8

問題は、DataURL の前にメタデータが追加されていることでした。base64 バッファーを作成する前に、まずその部分を削除する必要があります。

var data_url = req.body.file;
var matches = data_url.match(/^data:.+\/(.+);base64,(.*)$/);
var ext = matches[1];
var base64_data = matches[2];
var buffer = new Buffer(base64_data, 'base64');

fs.writeFile(__dirname + '/media/file', buffer, function (err) {
  res.send('success');
});

この質問からほとんどのコードを取得しました。

于 2012-10-25T14:30:52.923 に答える