Метеор - Как лучше всего получить файлы из почтового запроса?

В настоящее время я использую редактор wysiwyg, который имеет реализацию загрузки изображений, которая отправляет отправить запрос на указанный URL-адрес, а затем ожидает ответ в формате JSON, например: { "filelink": "/static/img.jpg" }, чтобы отобразить загруженное изображение.

Мой текущий подход заключается в создании маршрута на стороне сервера, который будет получать изображение из тела запроса, отправлять его в s3, сохранять метаданные (коллекцияFS), а затем возвращать необходимый JSON через ответ.

Я создал экземпляр редактора следующим образом:

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, но я не могу заставить Meteor получить эти файлы.


person Ronald Wichhart    schedule 13.11.2014    source источник


Ответы (1)


Данные 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
  });

});
person Hubert OG    schedule 13.11.2014
comment
Я использую collectionFS для создания файлового объекта, затем я прикрепляю к нему data, а затем загружаю его в локальную папку. По какой-то причине любое изображение, загружаемое в эту папку, повреждено. В документах упоминается, что attachData должен без проблем принимать буферы или массивы буферов на сервере. Какие-либо предложения? - person Ronald Wichhart; 17.11.2014