Sto*_*per 5 image-resizing graphicsmagick angularjs meteor collectionfs
我正在使用Meteor CollectionFS.目前我的文件上传是在客户端上执行的.我想在服务器上执行文件上传,以便其他平台如andriod或ios可以使用我的文件上传服务.
目前这是我的代码:
client.html
<input type="file" custom-on-change="uploadFile">
Run Code Online (Sandbox Code Playgroud)
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);
}
};
});
Run Code Online (Sandbox Code Playgroud)
Schema.js
Images = new FS.Collection("images", {
stores: [
new FS.Store.FileSystem("images", {path: '~/uploads'})
]
});
Run Code Online (Sandbox Code Playgroud)
该代码适合我.但正如您所看到的,一切都在客户端控制器中完成.如何在Meteor的服务器控制器上执行此操作?
如何将文件发送到服务器,以便我可以在那里处理,插入或上传图像?
编辑
如您所知,Android应用程序将发送base64编码的字符串.那我该怎么对待呢?我想在Meteor服务器上有一个集中的图像上传功能.
您可以将该逻辑放置在Meteor Method中。然后您可以决定是否希望该方法仅在服务器上运行或同时在客户端和服务器上运行(延迟补偿)。
所以我会将你的控制器更改为:
$scope.uploadFile = function(event){
Meteor.call("uploadFiles", event.target.files);
};
Run Code Online (Sandbox Code Playgroud)
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) {
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
该方法还可以返回值,在服务器和客户端上运行。我还会阅读Meteor 指南上有关 Meteor 方法的更多信息。
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |