const base64Img = require('base64-img');
const fs = require('fs');
const request = require('request');
const Https = require('https');
const TINYIMG_URL = ['tinyjpg.com', 'tinypng.com'];// tinyjpg的域名
function RandomHeader() { // 随机生成ip,避免上传数量被限制
const ip = new Array(4).fill(0).map(() => parseInt(Math.random() * 255, 10)).join('.');
const index = Math.round(Math.random(1));
return {
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded',
'Postman-Token': Date.now(),
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'X-Forwarded-For': ip,
},
hostname: TINYIMG_URL[index],
method: 'POST',
path: '/web/shrink',
rejectUnauthorized: false,
};
}
function UploadImgToTiny(file) {
const opts = RandomHeader();
return new Promise((resolve, reject) => {
const req = Https.request(opts, res => res.on('data', (data) => {
const obj = JSON.parse(data.toString());
if (obj.error) {
reject(obj.message);
} else {
resolve(obj);
}
}));
req.write(file, 'base64');
req.on('error', e => reject(e));
req.end();
});
}
function DownloadImg(url) {
return new Promise((resolve) => {
request({ url, encoding: 'base64' }, (error, res, body) => {
resolve(body);
});
});
}
// 客户端上传调的接口逻辑
async imgUpload(img,tinyFlag) {
let base64_str= base64Img.base64Sync(img.path);// 图片转成base64
if(tinyFlag==="true"){ // 如果开启压缩
const tiny=await UploadImgToTiny(fs.readFileSync(img.path, "base64"));// 上传到tinypng
const base64ImgData = await DownloadImg(tiny.output.url);// 从tinypng的域名下载到本地生成base64
base64_str= "data:image/png;base64,"+base64ImgData//
}
return new Promise((res) => {// 上传到本地的内部服务
request({
url: 'xxx',
formData: {
base64_str
},
}, (error, response, body) => {
if (error) throw new Error(error);
res(JSON.parse(body));
});
});
}
node集成tinypng的图片压缩及上传功能实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前段时间项目刚好需要用到图片预览裁剪压缩上传,而对于小白的我并没做过这方面的功能,可谓毫无头绪,于是上网查了下资料...
- 在需要编写并保存带有各种格式,图片的文章内容时,往往需要用到富文本编辑器,这次使用到的富文本编辑器是kin...
- editor.config.pasteTextHandle是配置粘贴文本内容处理,是一个函数,返回值就是文本框中粘...