whatsapp 群组消息监控/ 群组功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

99 lines
2.7 KiB

'use strict'
const axios = require('axios');
const fs = require('fs');
const url = "http://10.8.0.10:8081/group1/upload";
const dir = "/opt/crawl/whatsapp/whatsapp_wppconnect/sources/"
/**
* base64数据流转化为 适合formdata的格式
**/
function base64ToBlob(base64, mime) {
let raw;
if(base64.indexOf(";base64,") > -1){ // 如果存在base64这个前缀的话
const parts = base64.split(';base64,');
const contentType = parts[0].split(':')[1];
// console.log(parts[1]);
raw = atob(parts[1]);
}else{
raw = atob(base64);
}
const rawLength = raw.length;
const uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {type: mime});
}
/**
* 如果失败则下载到本地
**/
function saveToLocal(base64, mime){
var file_name = "".concat(new Date()* 1000, "_".concat(mime.replace("/", ".")))
file_name = dir + file_name;
let videoData;
if(base64.indexOf(";base64,") > -1){ // 如果存在base64这个前缀的话
const parts = base64.split(';base64,');
const contentType = parts[0].split(':')[1];
videoData = Buffer.from(parts[1], 'base64');
}else{
videoData = Buffer.from(base64, 'base64');
}
fs.writeFile(file_name, videoData, 'base64', (err) => {
if (err) {
console.error(err);
console.error("视频保存失败: ", base64);
return;
}
console.log('视频已保存为 ' + file_name);
});
return file_name;
}
async function upload_files(base64, mime, file_name){
// 创建一个Blob对象
const blob = base64ToBlob(base64, mime);
// 创建FormData对象并添加文件
const formData = new FormData();
formData.append('file', blob, file_name); // 'image.png'是文件名
const headers = {
'Content-Type': 'multipart/form-data'
}
// 这个包可以
try{
let res = await axios.post(url, formData, {
headers:headers,
timeout: 20000 // 设置超时时间
})
console.log("上传成功:", res["data"]);
// return res["data"];
return {media_data: res["data"], local_data: undefined};
}catch(error){
console.error('上传失败:', error);
let result = saveToLocal(base64, mime);
console.error("上传失败: 保存到本地 ", result);
return {media_data: "error", local_data: result}
// return "error";
}
// .then(response => console.log(response.data))
// .catch(error => console.error('Error:', error));
}
module.exports = {
upload_files,
saveToLocal
}