2015-07-15 5 views
0

(Cross сообщение от Meteor forums)Загрузка файла с использованием MeteorJS?

Скажите, что я хотел, чтобы загрузить файл на сервер, который построен с Метеор с другого компьютера через HTTP, когда второй компьютер попадает в определенный API.

До сих пор я смог создать такое приложение, используя NodeJS, платформу Express и multer middlewear. Я думал, что это будет легко перемещать в Метеор.

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

Однако, когда я попытался перевести приложение на Метеоре, файлы просто не загружены.

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

Когда вызов к серверу Метеор, ничего не происходит. Нет ошибки, и сервер ничего не печатает. Тем не менее, вызывающий получает «Ack!» с сервера.

Это меня немного озадачило, и я буду признателен за любую помощь.

Есть ли лучший способ сделать это?

Спасибо!

+0

при использовании метеорит, вызвав функцию не allowed.You следует вставить от клиента. –

ответ

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

 
})

Смежные вопросы