在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ nodejs中,使用sharp剪切一個(gè)圖片后,原圖不能刪除,原因是沒(méi)有關(guān)閉輸入流

nodejs中,使用sharp剪切一個(gè)圖片后,原圖不能刪除,原因是沒(méi)有關(guān)閉輸入流???

公共方法,進(jìn)行圖片的剪切和縮放操作,返回一個(gè)promise

const cutAndResizeImgTo250px = (sharp, output, cutArea) => {
    return cutAndResizeImg(sharp, output, cutArea, 250, 250);
};

const cutAndResizeImg = (sharp, output, cutArea, resizeWidth, resizeHeight) => {
    return new Promise((resolve, reject) => {
        sharp.extract(cutArea)
            .resize(resizeWidth, resizeHeight)
            .toFile(output, (err) => {
                if(err){
                    reject(err)
                }
                resolve({success: true});
            })
    })
};

這是調(diào)用一個(gè)公共方法,傳入sharp對(duì)象,執(zhí)行成功后想把原圖刪除,但是一直沒(méi)有釋放資源

let sharps = sharp(input);
    PublicFunc.cutAndResizeImgTo250px(
        sharps,
        output,
        {
            left: cutArea.x,
            top: cutArea.y,
            width: cutArea.width,
            height: cutArea.height
        }
    ).then(() => {
        //sharps = sharp(path.resolve(BaseConfig.root, 'public/uploads/reset.jpg'));
        fs.unlinkSync(input);
        res.json({success: true, message: '裁剪成功', result: Object.assign(file, {url: savePath})});
    }).catch(err => {
        logger.error(err);
        res.json({success: false, message: err.message});
    });

報(bào)錯(cuò)信息

clipboard.png

回答
編輯回答
我甘愿

先關(guān)閉你的input

2017年2月23日 07:52
編輯回答
別瞎鬧

let sharps = sharp(input);去掉
改成

PublicFunc.cutAndResizeImgTo250px(
        sharp(input),
        output,
        {
            left: cutArea.x,
            top: cutArea.y,
            width: cutArea.width,
            height: cutArea.height
        }
    )

不行就只能看源碼了

2018年6月10日 07:43
編輯回答
司令

最后還是換了一種寫法,先將圖片讀到buffer中,這樣子就不會(huì)有資源占用的問(wèn)題了

const cutAndResizeImg = (input, output, cutArea, resizeWidth, resizeHeight) => {
    return new Promise((resolve, reject) => {
        let stream = fs.createReadStream(input);
        let fileData = [];//存儲(chǔ)文件流
        stream.on('data', (data) => {
            fileData.push(data);
        });
        stream.on( 'end', function() {
            let finalData = Buffer.concat(fileData);
            sharp(finalData)
                .extract(cutArea)
                .resize(resizeWidth, resizeHeight)
                .toFile(output, (err) => {
                    if(err){
                        reject(err)
                    }
                    resolve({success: true});
                })
        });

    })
};
2018年7月9日 20:55