开发语言: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()