Pra*_*ngh 5 amazon-s3 node.js sharp
我想对从 AWS S3 获取的图像创建图像操作,并希望对其执行操作操作。我正在使用流来解决加载大文件的问题。
import AWS from 'aws-sdk'
import sharp from 'sharp'
const s3 = new AWS.S3()
const transformer = (w, res, next) =>
sharp()
.resize(w)
.on('data', (data) => {
console.log(data)
res.write(data, 'binary')
})
.on('error', (err) => next(err))
.on('end', () => {
console.log('finished')
res.status(200).end()
})
const readStream = s3
.getObject({
Bucket: process.env.UPLOAD_BUCKET_NAME,
Key: 'test.jpg'
// Key: `${req.uid.uid}/${req.param('img')}`
})
.createReadStream()
const getImage = (w, res, next) => {
readStream.pipe(transformer(w, res, next))
readStream.on('error', (err) => next(err))
}
export default getImage
Run Code Online (Sandbox Code Playgroud)
我在路线上调用 getImage 方法,该函数第一次提供图像,但是当第二次请求图像时,它会抛出错误:输入缓冲区包含不支持的图像格式
我找到了解决方案。
const getImage = (req, res, next) => {
const w = parseInt(req.params.w)
const readStream = s3
.getObject({
Bucket: process.env.UPLOAD_BUCKET_NAME,
Key: 'test.jpg'
})
.createReadStream()
const transformer = (w) => sharp().resize(w)
pipeline(readStream, transformer(w), res, (err) => {
if (err) {
next(err)
}
})
}
export default getImage
Run Code Online (Sandbox Code Playgroud)
它之所以如此,是因为它的范围不符合请求。