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) {
});
}
}
});
Метод также может возвращать значения, запускаемые на сервере и клиенте. Я также прочитал бы больше о Метеорных Методах на Метеорном гиде.