我有这个Meteor应用程序,可以上传图像。上传部分似乎有效。我将图像存储在.uploads
中。现在我想通过以下URL访问这些图像
http://localhost:3000/uploads
经过一段谷歌搜索后,我能够创建以下服务器端代码:
var fs = Meteor.require('fs');
if (Meteor.isServer) {
WebApp.connectHandlers.stack.splice(0, 0, {
route: '/uploads',
handle: function (req, res, next) {
var path = process.env.PWD + '/.' + req.originalUrl.substr(1);
fs.readFile(path, {encoding: 'binary'}, function (err,data) {
if (err) {
throw err;
}
res.writeHead(200, {
'Content-Type': 'image/png'
});
//res.setEncoding("binary"); // this method does not exist
res.write(data);
res.end();
});
}
});
}
此代码有效,path
构造正确,在浏览器中我收到200
代码,但不能显示图像。浏览器收到的数据有问题。我检查了磁盘上的图像,这很好。所以上面的代码必须对数据做错。有什么建议吗?
答案 0 :(得分:1)
这是我几天前搜索谷歌(并为我工作)后发现的代码,当时我想做你需要做的事情 文件在.screenshots目录中映射到:
http://localhost:3000/screenshots
代码:
//directly serve screenshot files from /.screenshots dir
var fs = Npm.require('fs');
WebApp.connectHandlers.use(function(req, res, next) {
var re = /^\/screenshots\/(.*)$/.exec(req.url);
if (re !== null) { // Only handle URLs that start with /screenshots/*
var filePath = process.env.PWD + '/.screenshots/' + re[1];
var data = fs.readFileSync(filePath, data);
res.writeHead(200, {
'Content-Type': 'image'
});
res.write(data);
res.end();
} else { // Other urls will have default behaviors
next();
}
});