全局替换图片链接脚本

const fs = require('fs')
const http = require("http");
var request = require('request')
const path = require('path')
var FormData = require('form-data');
let totalImage = []
let repeatImage =[]
let delRepeatImage = []
const randomString = (e)=>  {
    e = e || 32;
    var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",
        a = t.length,
        n = "";
    for (var i = 0; i < e; i++) {
        n += t.charAt(Math.floor(Math.random() * a))
    }
    return n + Date.now()
}
let getuplodOssUrl = (url) => {
    console.log(url,'-------url')
    return new Promise((resolve) => {
        http.get(url.replace('https', 'http'), (response) => {
            const UrlObj = new URL(response.headers.location)
            let suffix = response.headers.location.slice(response.headers.location.lastIndexOf('.'), response.headers.location.length)
            const srcobjectname =response.headers.location.replace(new RegExp(UrlObj.origin + '/', 'g'), '')
            const dstobjectname = new Date().toLocaleDateString().replace(/\//g, '-').replace(/\d{1,}/g, ($0)=> $0.padStart(2,0)+ '').replace(/-/g, '') + "/" + randomString(32) + suffix
            request({
                url: '阿里云接口',
                method: "POST",
                // json: true,
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                form: {
                    "srcbucketname": "xxx",
                    "srcobjectname": srcobjectname,
                    "dstobjectname": dstobjectname,
                    "destbucketname": "xxx"
                }
            },function(error, response, body) {
                if (!error && response.statusCode == 200) {
                    let fileUrl = '图片替换后的域名' + dstobjectname
                    request({
                        url: fileUrl,
                        method: "GET",
                    },function(error, response, body) {
                        if (!error && response.statusCode == 200) {
                            totalImage.filter((item,index)=>{
                               if(item==url){
                                resolve(fileUrl + '?x-oss-process=image/quality,q_80/format,' + suffix.replace('.', ''))
                               }
                            })
                            console.log(url, '=======>>>>>>', fileUrl + '?x-oss-process=image/quality,q_80/format,' + suffix.replace('.', ''))
                        } else {
                            resolve('')
                        }
                    })
                }
            })
        })
    })
}
let getReplaceRes = (files) => {
    return new Promise((resolve) => {
        let obj = {}
        let a3 = ''
        let i = 0

        files.replace(/https\:\/\/xxx\/xxx\/\w{1,}/gi,($0,$1) => {
            obj[$0]= ''
            totalImage.push($0)
        })
        totalImage.filter((item, index)=>{
            if(!delRepeatImage.includes(item)){
                delRepeatImage.push(item)
                getuplodOssUrl(item).then(res => {
                        obj[item] = res
                        // console.log( res )
                        a3 = files.replace(/https\:\/\/xxx\/xxx\/\w{1,}/gi, ($0) => {
                            if(res) {
                                return obj[$0]
                            } else {
                                return $0
                            }
                        })
                        i++
                        if(Object.values(obj).length === i) {
                            i=0
                            obj = {}
                            resolve(a3)
                        }
                })
            }
            if(repeatImage.indexOf(item)==-1 && totalImage.indexOf(item)!==totalImage.lastIndexOf(item)){
                repeatImage.push(item)
            }
        })
             
            console.log(totalImage,'totalImage',repeatImage,'repeatImage',delRepeatImage,'delRepeatImage')
    })
    
}
const a = async (sourcePath) => {
    const d = fs.statSync(sourcePath)
    if(d.isDirectory()) {
        let list = fs.readdirSync(sourcePath)
        list.forEach(item => {
            a(path.join(sourcePath, item))
        })
    } else {
        let files = fs.readFileSync(sourcePath, 'utf-8')
        let res = await getReplaceRes(files,sourcePath)
        // console.log(res,'res----')
        fs.writeFileSync(sourcePath, res, 'utf-8')
    }
}
a(path.join(__dirname, 'pages/demo.js')) //pages/demo.js 页面位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值