Node.js-KOA多圖片壓縮zip下載

const JSZip = require('jszip');

/**
     * 選中多個訂單 然後導出其中用戶的上傳的身份證圖片正反面
     * @param {*} data 
     */
    static async imgZip(data) {

        data.trade_ids = JSON.parse(data.trade_ids)

        let arr = "'" + data.trade_ids.join("','") + "'";
        //先循環查出地址
        let info = await super.query(`
            SELECT b.*,c.path,c.pathback FROM (
            SELECT * from (
            SELECT name,idCard,credit_no,trade_id from laborpersontemp where trade_id in (${arr})
            UNION ALL 
            SELECT name,idCard,credit_no,trade_id from laborpersonrecord where trade_id in (${arr})
            ) a GROUP BY a.idCard,a.credit_no
            ) b INNER JOIN laborpersonmain c on b.idCard=c.idCard and b.credit_no = c.credit_no and c.status = '2'
            GROUP BY c.idCard;
        `);

        let len = info.length;
        var zip = new JSZip();

        for (let i = 0; i < len; i++) {
            let name1 = `${info[i].idCard}_${info[i].name}正.${info[i].path.split('.')[info[i].path.split('.').length - 1]}`;
            let name2 = `${info[i].idCard}_${info[i].name}反.${info[i].path.split('.')[info[i].path.split('.').length - 1]}`;

            let buffer1 = Buffer.from(fs.readFileSync(path.resolve(`${Config.rootPath}/public/${info[i].path}`)));
            let buffer2 = Buffer.from(fs.readFileSync(path.resolve(`${Config.rootPath}/public/${info[i].pathback}`)));
            zip.file(name1, buffer1, { base64: true });
            zip.file(name2, buffer2, { base64: true });
        }

        // // 壓縮
        return await zip.generateAsync({
            // 壓縮類型選擇nodebuffer,在回調函數中會返回zip壓縮包的Buffer的值
            type: "nodebuffer",
            // 壓縮算法
            compression: "DEFLATE",
            compressionOptions: {
                level: 9
            }
        })
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章