Meteor - 从邮件请求中获取文件的最佳方式是什么?

时间:2014-11-13 04:38:29

标签: javascript meteor redactor

我目前正在使用编辑器wysiwyg,它有一个image upload implementation向一个给定的URL发送一个帖子请求然后期望返回一些JSON,如:{“filelink”:“/ static / img.jpg”}为了显示上传的图像。

我目前的方法是创建一个服务器端路由,它将从请求主体获取图像,将其发送到s3,保存元数据(collectionFS),然后通过响应返回必要的JSON。

我已经像这样实例化了redactor:

Template.editor.rendered = function() {
  $("#editor").redactor({
  imageUpload: "s3"
  });
};

服务器端路由器如下所示:

Router.route('/s3', function () {
  this.response.setHeader("Content-Type", "text/html");
  var data = JSON.stringify(this.request.body;
  var res = this.response;
  res.end(data);
  }, {where: 'server'}
);

不幸的是,这会返回一个空白的JSON对象。我尝试过request.files和request.body.files,但这些都行不通。

我知道路由正常,因为我可以通过响应发送简单的html。而且,我绝对可以在firebug中的post请求中看到上传文件的二进制数据,但我似乎无法让Meteor获取这些文件。

1 个答案:

答案 0 :(得分:0)

POST数据在调用中间件时不可用,而是在data个事件中接收。您需要处理这些事件以获取文件数据。例如:

Router.route('...', function() {
  var buffers = [];
  var totalLength = 0;

  this.request.on('error', function(err) {
    // handle network error here
  });

  this.request.on('data', function(chunk) {
    buffers.push(chunk);
    totalLength += chunk.length;
    if(totalLength > SOME_LARGE_CONSTANT) {
      // handle data overflow here
    }
  });

  this.request.on('end', function() {
    var data = Buffer.concat(buffers);
    // handle properly received data here
  });

});