我正在尝试将文件从移动triggerio应用程序发布到nodejs服务。请求命中了 post 方法,但是失败,因为请求 obj 中的表单对象为 null。 (类型错误:无法调用未定义的“完整”方法)
我已经根据这篇文章中接受的答案改编了代码:Uploading images using Node.js, Express, and Mongoose
这是我当前的nodejs代码:
var express = require('express')
, form = require('connect-form');
var app = express.createServer(
form({ keepExtensions: true })
);
app.post('/fileupload', function(req, res, next){
//req. form is nulL
req.form.complete(function(err, fields, files){
if (err) {
next(err);
} else {
console.log('\nuploaded %s to %s'
, files.image.filename
, files.image.path);
res.redirect('back');
}
});
req.form.on('progress', function(bytesReceived, bytesExpected){
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
});
});
app.listen(process.env.PORT);
console.log("express started");
这是我在triggerio中的上传方法:
function uploadFile (file){
forge.request.ajax({
url: 'http://resttrigger.aykarsi.c9.io/fileupload',
type: 'POST',
files: [file],
fileUploadMethod: 'raw',
dataType: 'json',
success: function (data) {
forge.logging.log("success " + data);
},
error: function (e) {
forge.logging.log("error " + e);
}
});
}
最佳答案
使用 fileUploadMethod: 'raw'
可能是这里的问题:这意味着请求正文只是一个二进制 blob,而不是节点代码期望的多部分编码形式。
作为引用,这里是一个最小的处理程序,它将上传的文件保存到 /tmp
中:
exports.upload = function(req, res){
var filename = '/tmp/' + new Date().getTime();
console.log(JSON.stringify(req.files));
// replace "test" with your actual form field name
fs.readFile(req.files["test"].path, function (err, data) {
fs.writeFile(filename, data, function (err) {
res.send({filename: filename});
});
});
};
关于express - 从triggerio上传图像到express.js失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752021/