侧边栏壁纸
博主头像
woku博主等级

成功的路上并不拥挤

  • 累计撰写 50 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

Koa2+Puppeteer爬虫项目-图片资源上传七牛

woku
2021-12-10 / 0 评论 / 0 点赞 / 89 阅读 / 1,615 字

七牛云的基本使用

前提:拥有七牛云账号、自己的服务器和域名

新建空间

在对象存储中新建空间-如:ke-tx-class

配置CNAME

在七牛云的空间中找到CNAME

在自己的域名提供商添加一条CNAME的解析记录

这样我们访问自己域名资源的时候,域名解析到了别的域名上。

配置秘钥

上传文件时,需要用户的ak、sk和空间名称

在config文件夹下新建user_config.js文件

module.exports = {
    qiniu: {
        keys: {
            ak: 'V31......GrU',
            sk: 'd-AO-.....THnNA0XjyGY'
        },
        txClassBucket: {
            bucket: 'ke-tx-class',
            domain: 'http://tx-class.woku.net/'
        }
    }
}

上传文件

在lib下的utils.js中添加七牛云图片上传方法

在上传图片时,需求对图片进行重命名,使用nanoid生成唯一的值

   const cp = require('child_process'),
  { resolve } = require('path'),
  Qiniu = require('qiniu'),
  { nanoid } = require('nanoid')
  qiniuUpload(options) {
        const mac = new Qiniu.auth.digest.Mac(options.ak, options.sk),
              config = new Qiniu.conf.Config(),
              client = new Qiniu.rs.BucketManager(mac, config),
              key = nanoid() + options.ext

        return new Promise((res, rej) => {
            client.fetch(options.url, options.bucket, key, function(err, respBody, respInfo) {
                if (err) {
                    rej(err)
                } else {
                    if (respInfo.statusCode == 200) {
                        res({key})
                    } else {
                        rej(respInfo.statusCode)
                    }
                }
            })
        })

    }

在爬虫程序中,爬取到data数据后,调用qiniuUpload进行图片上传,并且把上传时生成的新的图片名称保存到data中。

const {
    startProcess,
    qiniuUpload
} = require('../libs/utils')
const {
    qiniu
} = require('../config/user_config')
const { addSliderData } = require('../server/slider')
class Crawler {
    crawlerSliderData() {
        startProcess({
            path: '../crawler/slider.js',
            async message(data) {
                const {
                    keys,
                    txClassBucket
                } = qiniu
                data.forEach(async item => {
                    // imgUrl:图片在页面上的地址
                    // imgKey: 在七牛云中生成的新图片名称
                    if (item.imgUrl && !item.imgKey) {
                        try {
                            const resData = await qiniuUpload({
                                url: item.imgUrl,
                                ak: keys.ak,
                                sk: keys.sk,
                                bucket: txClassBucket.bucket,
                                ext: '.jpg'
                            })
                            if (resData.key) {
                                item.imgKey = resData.key
                            }
                        } catch (err) {
                            console.error(err)
                        }
                    }
                });
            },
            async exit(code) {
                console.log(code)
            },
            async error(err) {
                console.log(err)
            }
        })
    }
}

module.exports = new Crawler()
0

评论区