将图片url保存到自己的云端

开发语言:nodejs
框架:express
实现功能:将其他公司的图片url保存到公司网易云上,防止数据的丢失
注:在验证图片能否打开之前可以先验证url的格式是否是图片格式,比如是否以.jpg结尾(未写)

代码如下:

const request = require('request')
const fs = require('fs')
const Path = require("path");
// upload是本地文件夹的名称
const uploadsPath = require("app-root-path").resolve("upload");
// 此处使用的网易云配置
const Nos = require("../../Nos/Nos");


let test = async (params) => {
	//这个url为测试使用的错误地址
    let url = 'http://weiyisuyuan.nos-eastchina1.126.net/1571726035552wdua=1987879949,787405073&fm=26&gp=0.jpg'
    //请求参数配置
    var options = {
        method: 'GET',
        //切勿忘了在此处添加 encodeURI
        url: encodeURI(url),
        qs: { section: '33' },
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'
        }
    };
    //此处的error和response不起作用,但是不能删除
    request(options, function (error, response, body) {
        //打印异常的时候body中的信息,如果出现<Error>,就说明url地址异常
        if (body.indexOf('<Error>') !== -1) {
            console.log('图片无法正常打开');
        }
    });

    const name = url.slice(url.lastIndexOf('/') + 1)
    // 自定义图片的名字
    const mkName = Date.now() + 'ITF' + name
    // 使用根路径自动匹配,读取图片url,然后存放到本地文件夹下。encodeURI来处理url中带有中文的问题
    let writeStream = request(encodeURI(url)).pipe(fs.createWriteStream(uploadsPath + '/' + mkName));
    // 监听
    writeStream.on('close', async function () {
        // 上传到网易云
        storageUrl = await Nos.upload(mkName, Path.join(uploadsPath, mkName));
        // 获取上传后的图片url
        nosPhotoPaht = storageUrl.split("?")[0];
        // 删除本地的图片
        fs.unlinkSync(Path.join(uploadsPath, mkName));
    });

}
test()

发布了24 篇原创文章 · 获赞 4 · 访问量 2316

猜你喜欢

转载自blog.csdn.net/qq_43234632/article/details/104502258