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 | 掘金社区
  • 相关阅读:
    AC自动机模板2(【CJOJ1435】)
    AC自动机模板1(【洛谷3808】)
    【HDU 2063】过山车(二分图最大匹配模板题)
    矩阵快速幂
    Trie树
    AC自动机
    高斯消元法
    KMP算法 Next数组详解
    端口映射
    最全面的HashMap和HashTable的区别
  • 原文地址:https://www.cnblogs.com/yesyes/p/15378521.html
Copyright © 2011-2022 走看看