如何使用Meteor提供(上传)图像

时间:2014-05-23 18:34:32

标签: javascript meteor

我有这个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代码,但不能显示图像。浏览器收到的数据有问题。我检查了磁盘上的图像,这很好。所以上面的代码必须对数据做错。有什么建议吗?

1 个答案:

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