我目前正在使用编辑器wysiwyg,它有一个image upload implementation向一个给定的URL发送一个帖子请求然后期望返回一些JSON,如:{“filelink”:“/ static / img.jpg”}为了显示上传的图像。
我目前的方法是创建一个服务器端路由,它将从请求主体获取图像,将其发送到s3,保存元数据(collectionFS),然后通过响应返回必要的JSON。
我已经像这样实例化了redactor:
Template.editor.rendered = function() {
$("#editor").redactor({
imageUpload: "s3"
});
};
服务器端路由器如下所示:
Router.route('/s3', function () {
this.response.setHeader("Content-Type", "text/html");
var data = JSON.stringify(this.request.body;
var res = this.response;
res.end(data);
}, {where: 'server'}
);
不幸的是,这会返回一个空白的JSON对象。我尝试过request.files和request.body.files,但这些都行不通。
我知道路由正常,因为我可以通过响应发送简单的html。而且,我绝对可以在firebug中的post请求中看到上传文件的二进制数据,但我似乎无法让Meteor获取这些文件。
答案 0 :(得分:0)
POST数据在调用中间件时不可用,而是在data
个事件中接收。您需要处理这些事件以获取文件数据。例如:
Router.route('...', function() {
var buffers = [];
var totalLength = 0;
this.request.on('error', function(err) {
// handle network error here
});
this.request.on('data', function(chunk) {
buffers.push(chunk);
totalLength += chunk.length;
if(totalLength > SOME_LARGE_CONSTANT) {
// handle data overflow here
}
});
this.request.on('end', function() {
var data = Buffer.concat(buffers);
// handle properly received data here
});
});