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




