(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!» с сервера.
Это меня немного озадачило, и я буду признателен за любую помощь.
Есть ли лучший способ сделать это?
Спасибо!
при использовании метеорит, вызвав функцию не allowed.You следует вставить от клиента. –