Pre-requisite for Node in Azure Serverless
- You have created a function with with name "download-files"
- You have downloaded ffmpeg files (ffmpeg.exe) in "site -> wwwroot-> bin"
- You have created a folder with name wav_to_mp3 "site -> wwwroot-> wav_to_mp3"
Source Code
//Download the Required module const http = require('https'); const fs = require('fs'); //const childProcess = require('child_process'); const path = require('path'); //Define constants const VIDEO_PATH = 'wav_to_mp3/'; const ffmpegLib='bin/ffmpeg'; module.exports = function (context, req) { ////////////// params declaration let bodyData=req.body; let tourStreamName=bodyData.tour_stream_name; let videoUrls=bodyData.url; let filename=''; let filenameSuccessLog={}; let completedCounter=0; if (tourStreamName && videoUrls.length>0) { ////////////////////// ALL VIDEOS DOWNLOAD //////////////////////////// //const forLoop = async _ => { videoUrls.forEach(async (url) => { filename=path.basename(url); // let videoDownload=VIDEO_PATH+filename; //full video url, filename, force download downloadFileAsync(url,filename,0).then(data=>{ filenameSuccessLog[data.filename]=data.success; completedCounter++; if(videoUrls.length==completedCounter){ messageData(200,{success:1,'msg':'',result:filenameSuccessLog}); } }); }) //} //forLoop(); ////////////////////// ALL VIDEOS DOWNLOAD //////////////////////////// } else { messageData(200,{success:0,msg:"Parameter missing (tour_stream_name OR url)",'result':{}}); } //for print the message function messageData(statusCode,message){ context.res = { status: statusCode, body: message, headers: { 'Content-Type': 'application/json' } }; context.done(); } }; ///////////////////////////// Other Functions //////////////////////////////////// /** * @url: url of video * @destination: file with name download in wav_to_mp3 * @forcedownload: 1 means download again even */ async function downloadFileAsync(url, destination,forcedownload) { return new Promise(function(resolve, reject) { let result={success:0,'msg':'',filename:destination}; if (fs.existsSync(VIDEO_PATH+destination) && forcedownload==0) { result.success=1 resolve(result); }else{ const file = fs.createWriteStream(VIDEO_PATH+destination); const request = http.get(url, (res) => { res.pipe(file); }); request.once('error', (error) => { result.msg=error; reject(result); } ); file.once('finish', () => { result.success=1 resolve(result); } ); } }) } ///////////////////////////// Other Functions ////////////////////////////////////
URL: https://function-name.azurewebsites.net/api/download-files
Method: POST
Request:
{"tour_stream_name":"arun","url":["https://example.com/video/0_20190821064650782.mp4","https://example.com/video/tq_33038dev-GM-ma9kW-1106-26079.mp4"]}Response:
{ "success": 1, "msg": "", "result": { "tq_33038dev-GM-ma9kW-1106-26079.mp4": 1, "0_20190821064650782.mp4": 1 } }