'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 }