zoukankan      html  css  js  c++  java
  • jimp并行下载图片

    const express = require('express')
    const app = express()
    const cors = require('cors')
    const fs = require('fs')
    const path = require('path')
    const Jimp = require('jimp')
    const https = require('https')
    const PromisePool = require('es6-promise-pool')
    
    
    const imgs = [
    'https://readfree.me/media/covers/2018/12/05/cover_QALqTsz.jpg', 
    'https://readfree.me/media/covers/2017/04/21/%E7%94%B0.jpg', 
    'https://readfree.me/media/covers/2018/08/12/s27310588.jpg'
    ]
    
    const ps = imgs.map((item) => {
        // 原生方案
        // return new Promise((resolve, reject) => {
        //     https.get(i, (res) => {
        //         const a = i.slice(-8)
        //         res.pipe(fs.createWriteStream(path.join(__dirname, `./static/${a}`))).on("finish", () => {
        //             resolve()
        //             console.log(a)
        //         }).on('error', (err) => {
        //             console.log(err)
        //             resolve()
        //         })
        //     })
        // })
        
        
        // 这种并发有数量限制,imgs具体数量未知
        return new Promise((resolve, reject) => {
           const a = item.slice(-8)
           Jimp.read(item)
                .then(lenna => {
                    const url = path.join(__dirname, `./static/${a}`)
                    lenna
                        .resize(56, Jimp.AUTO) // resize
                        .write(url) // save
                        console.log(a)
                    resolve()
                })
                .catch(err => {
                    console.log(err)
                    resolve()
                })
        })
        
        // 新的并发方式
         const generatePromises = function* () {
            for (const item of list) {
                yield Jimp.read(`https://readfree.me/${item.src}`)
                    .then(lenna => {
                        const url = path.join(__dirname, `../public3/${item.thumbnail}`)
                        lenna
                            .write(url) // save
                        console.log(item._id, item.subject)
                    })
                    .catch(err => {
                        console.log(err)
                    })
            }
        }
        const promiseIterator = generatePromises()
        const pool = new PromisePool(promiseIterator, 5)
    
        pool.start()
            .then(() => console.log('Complete'))
    })
    
    
    // Promise.all(ps)
    
    
    app.listen(3002)
    console.log('listen 3002')
    
    常用网站: SegmentFault | GitHub | 掘金社区
  • 相关阅读:
    一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
    dynamic与var
    转载-V.I.Arnold, beyond a mathematician
    转载---青年问禅师
    转载-傅里叶级数的几何意义 – 巧妙记忆公式的方法
    转载--柯尔莫哥洛夫
    转载--黎曼
    动态规划复习
    几匹单调队列水题
    fastIO
  • 原文地址:https://www.cnblogs.com/yesyes/p/15378521.html
Copyright © 2011-2022 走看看