我只是从S3流式传输。这非常容易,而签名的URL则困难得多。只要确保在将图像上传到S3时设置了
content-type和
content-length标头即可。
var aws = require('knox').createClient({ key: '', secret: '', bucket: ''})app.get('/image/:id', function (req, res, next) { if (!req.user.is.authenticated) { var err = new Error() err.status = 403 next(err) return } aws.get('/image/' + req.params.id) .on('error', next) .on('response', function (resp) { if (resp.statusCode !== 200) { var err = new Error() err.status = 404 next(err) return } res.setHeader('Content-Length', resp.headers['content-length']) res.setHeader('Content-Type', resp.headers['content-type']) // cache-control? // etag? // last-modified? // expires? if (req.fresh) { res.statusCode = 304 res.end() return } if (req.method === 'HEAD') { res.statusCode = 200 res.end() return } resp.pipe(res) })})


