我有一个奇怪的问题,其中图像在索引上显示不止一次,但在永久链接视图中显示每个帖子的正确图像系列。
我正在使用这个控制器,路由到/grid/:id
exports.getById = function(req, res){
id = req.params.id;
var conn = mongoose.createConnection(res.locals.db);
conn.once('open', function(){
var gfs = Grid(conn.db, mongoose.mongo);
gfs.files.find({ _id: ObjectID(id) }).toArray(function(err, files){
if (err) throw new Error(err);
// console.log(files);
res.set('Content-Type', files[0].contentType);
});
var readstream = gfs.createReadStream({ _id: id });
readstream.pipe(res);
});
};
屏幕截图是我解释正在发生的事情的最简单方法。
这是当前正在渲染的索引(请注意,这里有两个不同的链接,但显示的是相同的图像):
这是对 Web Inspector 中第一张图像的检查:
经过仔细检查……
但是,如果我转到该帖子的永久链接页面,它会随机显示正确的图像或再次显示相同的图像。但是,如果我将第一张图片拖到地址栏然后回击,它会再次显示正确的图片:
直到我点击刷新...
我的第一个猜测是它发送了不正确的ContentType
,但现在代码发送了res.set('ContentType', files[0].contentType)
; 这可行,但即使手动将其设置为'image/png'
也无法修复它。
我还为使用标准mongodb
驱动程序制作了第二个控制器,但我得到了同样的错误。
var mongo = require('mongodb');
var Grid = require('gridfs-stream');
var ObjectID = require('mongodb').ObjectID;
exports.mongoGet = function(req, res){
id = req.params.id;
var db = new mongo.Db('database', new mongo.Server("127.0.0.1", 27017), {safe: true});
db.open(function (err){
if (err) throw new Error(err);
var gfs = Grid(db, mongo);
var readstream = gfs.createReadStream({ _id: ObjectID(id) });
res.set('Content-Type', 'image/png');
readstream.pipe(res);
});
};
这让我经历了一个巨大的循环。任何帮助将不胜感激!