严重错误:输入缓冲区包含不支持的图像格式

问题描述

我想对从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,next) => {
    readStream.pipe(transformer(w,next))
    readStream.on('error',(err) => next(err))
}

export default getImage

我正在路由上调用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),(err) => {
        if (err) {
            next(err)
        }
    })
}
export default getImage

之所以这样,是因为它不属于请求范围。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...