|
|
const fs = require('fs'); const url = "https://crawl-files.pontoaplus.com/upload"; //const url = "http://172.18.1.113:8080/upload"
/** * 视频流解密操作 **/ function I(t, e, decryptor_array) { for (var r = new Uint8Array(t), n = 0; n < t.byteLength && e + n < decryptor_array.length; n++) r[n] ^= decryptor_array[n]; return r }
function toArrayBuffer(buffer) { const arrayBuffer = new ArrayBuffer(buffer.length); const view = new Uint8Array(arrayBuffer);
for (let i = 0; i < buffer.length; i++) { view[i] = buffer[i]; }
return arrayBuffer; }
/** * * 视频下载 **/ async function download(url, decode, decryptor_array){ let response = await fetch(url, { headers:{ "Cache-Control": "no-cache" } });
if(response.status == 200){ let arrayBuffer = await response["arrayBuffer"](); let m = I(arrayBuffer, 0, decryptor_array); // 进行计算
return m; }
console.log("下载失败:", decode, ":", url); return undefined; }
/** * 视频上传 **/ async function upload(arrayBuffer, file_name){ const formData = new FormData(); const videoBlob = new Blob([arrayBuffer], { type: 'video/mp4' }); formData.append('file', videoBlob, file_name); try{ let response = await fetch(url, { method: 'POST', body: formData, timeout: 20000 // 设置超时
});
if(response.status == 200){ let data = await response.text(); return data; } console.log("[wx] 视频上传失败") }catch(e){ console.log("[wx] 视频上传异常", e) }
return undefined; }
/** * 保存文件到本地 **/ function saveUint8ArrayToFile(uint8Array, filePath) { const buffer = Buffer.from(uint8Array);
fs.writeFile(filePath, buffer, error => { if (error) { console.error('Failed to save file:', error); } else { console.log('File saved successfully.'); } });
return filePath; }
/** * * 视频整体处理流程 **/ async function main(local_path, url, decode, decryptor_array){ console.log(url); let arrayBuffer = await download(url, decode, decryptor_array); let file_name = decode.concat(".mp4"); let upload_file = arrayBuffer !== undefined ? await upload(arrayBuffer, file_name):undefined; let filePath = upload_file !== undefined ? upload_file:saveUint8ArrayToFile(arrayBuffer, local_path); return filePath == undefined ? {"status": 500, "filePath": filePath, "msg": "下载失败"}: (filePath != local_path ? {"status": 200, "filePath": filePath, "msg": "上传成功"}:{"status": 203, "filePath": filePath, "msg": "上传失败"}); }
async function main1(local_path, buffer, decode, decryptor_array){ let arrayBuffer = toArrayBuffer(buffer); let file_name = decode.concat(".mp4"); let m = I(arrayBuffer, 0, decryptor_array); // 进行计算
let upload_file = m !== undefined ? await upload(m, file_name):undefined; let filePath = upload_file !== undefined ? upload_file:saveUint8ArrayToFile(m, local_path); return filePath == undefined ? {"status": 500, "filePath": filePath, "msg": "视频流传输失败"}: (filePath != local_path ? {"status": 200, "filePath": filePath, "msg": "上传成功"}:{"status": 203, "filePath": filePath, "msg": "上传失败"}); }
async function main2(local_path, buffer, decode, decryptor_array){ let arrayBuffer = toArrayBuffer(buffer); let m = I(arrayBuffer, 0, decryptor_array); // 进行计算
return m; }
module.exports = {main, main1, main2};
|