Meteor CollectionFS - загрузка изображений на сервер

Я использую Meteor CollectionFS. В настоящее время загрузка моего файла выполняется на клиенте. Я хочу выполнить загрузку файлов на сервер, чтобы другие платформы, такие как andriod или ios, могли использовать мои службы загрузки файлов.

В настоящее время вот мой код:

client.html

<input type="file" custom-on-change="uploadFile">

clientController.js

app.controller('clientController', function ($scope, $meteor, $filter) {

    $scope.uploadFile = function(event){

        var files = event.target.files;

        for (var i = 0, ln = files.length; i < ln; i++) {

            files[i].userId = Meteor.userId();

            Images.insert(files[i], function (err, fileObj) {

            });
        }
    };
});
app.directive('customOnChange', function() {
  return {
    restrict: 'A',
    link: function (scope, element, attrs) {
      var onChangeHandler = scope.$eval(attrs.customOnChange);
      element.bind('change', onChangeHandler);
    }
  };
});

Schema.js

Images = new FS.Collection("images", {
    stores: [
      new FS.Store.FileSystem("images", {path: '~/uploads'})
    ]
});

Код прекрасно работает для меня. Но, как видите, все сделано в клиентском контроллере. Как я могу выполнить это на контроллерах сервера в Meteor?

Как я могу отправить свой файл на сервер, чтобы я мог обрабатывать, вставлять или загружать туда свои изображения?

РЕДАКТИРОВАТЬ

Как вы знаете, приложение для Android будет отправлять строку в кодировке base64. Так как я буду относиться к этому здесь? Я хочу иметь централизованную функцию для загрузки изображений на Meteor Server.

1 ответ

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

Поэтому я бы изменил ваш контроллер на:

$scope.uploadFile = function(event){
  Meteor.call("uploadFiles", event.target.files);
};

Schema.js (или любой другой файл, который может быть запущен на сервере или клиенте и сервере - узнайте больше о структуре файлов Meteor здесь)

Images = new FS.Collection("images", {
    stores: [
      new FS.Store.FileSystem("images", {path: '~/uploads'})
    ]
});

Meteor.methods({
  uploadFiles: function (files) {

    for (var i = 0, ln = files.length; i < ln; i++) {
        files[i].userId = Meteor.userId();

        Images.insert(files[i], function (err, fileObj) {
        });
    }

  }
});

Метод также может возвращать значения, запускаемые на сервере и клиенте. Я также прочитал бы больше о Метеорных Методах на Метеорном гиде.

Другие вопросы по тегам