使用MeteorJS上传文件?

时间:2015-07-15 22:30:00

标签: node.js rest http meteor file-transfer

(来自Meteor forums的交叉帖子)

当我说第二台计算机遇到某个API时,我希望将文件上传到通过HTTP从另一台计算机使用Meteor构建的服务器。

到目前为止,我已经能够使用NodeJS,Express框架和multer中间件创建这样的应用程序。我认为把它移到Meteor很容易。

的NodeJS:

var express = require('express');
var multer = require('multer');
var done = false;
var port = 8888;

var app = express();

//Multer configuration
app.use(multer({
    dest: './uploads/',
    limits: {
        fileSize: undefined
    },
    rename: function(fieldName, fileName){
        return fieldName + Date.now();
    },
    onFileUploadStart: function(file){
        console.log(file.originalname + ' has started downloading!');
    },
    onFileUploadComplete: function(file){
        console.log(file.fieldname + ' has been uploaded to ' + file.path);
        done = true;
    },
    onFileSizeLimit: function(file){
        console.log("File " + file.originalname + " is too large");
    },
    onError: function(){
        console.log("ERROR!!");
    }
}));

// POST /api/upload
app.post('/api/upload', function(req, res){

    if(done === true){
        console.log(req.files);
        done = false;
    }

    res.write("Ack!");
    res.end();
});

app.listen(port);

然而,当我尝试将应用程序翻译为Meteor时,文件才被上传。

MeteorJS

var multer = Npm.require('multer');

var done = false;

//Set up Multer
Picker.middleware(multer({
    dest: './fileUploads',
    limits: {
        fileSize: undefined
    },
    rename: function(fieldName, fileName){
        return fieldName + Date.now();
    },
    onFileUploadStart: function(file){
        console.log("[.]" + file.originalname + " upload has started at " + Date.now());
    },
    onFileUploadComplete: function(file){
        console.log("[.]" + file.originalname + " upload has finished at " + Date.now());
        done = true;
    },
    onFileSizeLimit: function(file){
        console.log("[.]" + file.originalname + " file size limit has been reached");
    },
    onError: function(){
        console.log("[.]ERROR!");
    }
}));

var postPicker = Picker.filter(function(req, res){
    return req.method === "POST";
});

//Actual route, after the middleware has been set up
postPicker.route('/api/upload', function(params, req, res, next){

    if(done === true){
        console.log(req.files);
        done = false;
    }

    res.write("Ack!");
    res.end();
})

当调用Meteor服务器时,没有任何反应。没有错误,服务器不打印任何内容。但是,来电者会收到" Ack!"从服务器。

这让我感到有些困惑,我将非常感谢所有人的帮助。

有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)



FS.Utility.eachFile(event, function(file){


      var doc = new FS.File(file);

      doc.metadata = {};

      _.extend(doc.metadata,  {
        userId: userId
      });

      Images.insert(doc, function(err, fileObj){
      
      
      })

})