【问题标题】:Meteor CollectionFS - Image uploading on serverMeteor CollectionFS - 在服务器上上传图像
【发布时间】:2016-03-21 07:24:15
【问题描述】:

我正在使用 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 服务器上有一个集中的图像上传功能。

【问题讨论】:

  • 我不太明白你的问题。您已经将文件发送到服务器。这段代码在科尔多瓦应用程序中不起作用吗?
  • @SerkanDurusoy 此代码非常适合网络。但是正如您所见,所有代码都放在客户端上。如果一个安卓应用想要使用我的图片上传方法怎么办?他当然会发送一个 base64 编码的字符串。那我该如何处理呢?

标签: angularjs meteor image-resizing graphicsmagick collectionfs


【解决方案1】:

您可以将该逻辑放在Meteor Method 中。 然后,您可以决定是希望该方法仅在服务器上运行,还是同时在客户端和服务器上运行(延迟补偿)。

所以我会将您的控制器更改为:

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

Schema.js(或任何其他可以在服务器或客户端和服务器上运行的文件 - 阅读有关 Meteor 文件结构的更多信息here

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) {
        });
    }

  }
});

该方法还可以返回值,在服务器和客户端上运行。 我还会在Meteor guide 上阅读有关 Meteor 方法的更多信息。

【讨论】:

  • 我想在这里问两件事。您确定我们可以将 event.target.files (A FILE OBJECT) 传递给服务器函数吗?如您所知,Android 应用程序将发送 base64 编码字符串而不是文件 obj。那么我将如何处理呢?
  • 我试过这样。我在 Meteor.methods 中得到文件的空对象。像这样: { '0': {} }
  • 是的,我写了一个通用的东西,它不是一个完整的解决方案,但我希望你能明白
  • @HassanSardar 你可以只传递文件 URL(因为你使用文件系统)并保存它,或者如果你使用的是 gridfs,则只保存 id,这是我在使用文件系统的痛苦时期后推荐的。对于生产 IMO 来说绝对更容易更好
  • 好吧,我已经使用简单的文件系统模块管理了文件上传。感谢所有的帮助。如果您也可以看一下,我还有另一个问题:stackoverflow.com/questions/34527629/…
猜你喜欢
  • 2015-06-01
  • 1970-01-01
  • 2015-05-17
  • 2014-05-27
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2016-05-06
  • 2023-03-10
相关资源
最近更新 更多