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