我有一个应用,其中用户的照片是私人的。我将照片(也有缩略图)存储在AWS s3中。网站上有一个页面,用户可以在其中查看他的照片(即缩略图)。现在,我的问题是如何处理这些文件。我评估过的一些选项是:
我无法评估这两个选项中的哪一个是更好的选择?我想将尽可能多的工作重定向到S3或Cloudfront,但是即使使用单个URL也会使请求首先到达我的服务器。我也想要缓存功能。
那么什么是理想的方式呢?与这些方法有关的特定问题的答案?
我只是从S3流式传输。这非常容易,而签名的URL则困难得多。只要确保在将图像上传到S3时设置了content-type和content- length标头即可。
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) }) })