Can not upload video file node.js to facebook graph api version v21,0 and error is video file not supported

I am Creating a ecommerce what will be able to post facebook the video events of the website .

and I am using facebook graph api version v21.0

for generating session id , I use

//FACEBOOK_GRAPH_API=https://graph.facebook.com //FACEBOOK_GRAPH_VERSION=v21.0 async function initInializeVideoUploadSession({file_name,file_length,file_type,access_token}) {     let url =makeUrlWithParams(`${FACEBOOK_GRAPH_API}/${FACEBOOK_GRAPH_VERSION}/${FACEBOOK_APP_ID}/uploads`,{         file_name,         file_length,         file_type,         access_token     });     log({url})     let res=await fetch(url, {         method :'POST'     });     res=await res.json();     if (!res.id) {         console.log(res);         throw 'Can not facebook token'     }     return res.id } 

for generating the file handle

 //FACEBOOK_GRAPH_API=https://graph.facebook.com //FACEBOOK_GRAPH_VERSION=v21.0 async function uploadAVideoFile(options) {     let prom= new Promise( async(resolve, reject) => {         let {             session,             access_token,             videoPath,             filename         }=options         let url =makeUrlWithParams(`${FACEBOOK_GRAPH_API}/${FACEBOOK_GRAPH_VERSION}/${session}`,{})         log({url})         request(url , {             method :'POST',              headers :{                 'Authorization':'OAuth '+access_token,                 'file_offset' :'0',                 'accapt':"video/mp4",                 'cache-control': 'no-cache',                 'content-type' : 'video/mp4',                 'content-disposition': 'attachment; filename=' + filename,                 'content-length':fs.statSync(videoPath).size.toString()             },             body :fs.readFileSync(videoPath,'binary'),             encoding :null         },responseCallBack)         function responseCallBack(error , response, data) {             data=JSON.parse(data);             log(data)             if (data.h) return resolve(data.h)             if (!data.h) {                 throw new Error('File Handler is not define')             }         }     })     let h=await prom.then(h => h)     return h    } 

By facebook api, I can generate session id ,file handle ,

but when I am using this file handle to post a video on facebook page i am getting error ,video format not supported,please see the upload video code

 async function videoFacebookApi(req,res) {     let {title,description,filename}=req.body;       try {         if (typeof title        !==  'string' ) throw 'title is null'         if (typeof description  !==  'string' ) throw 'description is null'         if (typeof filename     !==  'string' ) throw 'filename is null'         let access_token = await settingsAsString('fb_access_token');         let tokenDate    = await settingsAsString('fb_access_token_enroll_date');         if ( !access_token || !tokenDate) {             throw new Error('!FV_PAGE_ACCESS_TOKEN || !tokenDate')         }         updateFacebookApiAccessToken(tokenDate);         let videoPath=resolve(dirname(fileURLToPath(import.meta.url)), '../../../public/video/Beauty.mp4');                          log('// file upload session started')         let session=await initInializeVideoUploadSession({             file_name:filename,             file_length:fs.statSync(videoPath).size,             file_type:"video/mp4",             access_token         });         log('// file uploading started')         let file_handle= await uploadAVideoFile({             session,             access_token,             videoPath,             filename,             });         log('// video post started')         await request.post(makeUrlWithParams('https://graph-video.facebook.com'+'/'+FACEBOOK_GRAPH_VERSION+'/'+FB_PAGE_ID+'/videos',{}),             {             headers :{                 "Content-Type": "multipart/form-data",                 "accept": "*/*"             },             formData :{                 title,                 description,                 access_token,                 fbuploader_video_file_chunk:file_handle             }         }, uploadToFacebook );         async function uploadToFacebook(error, response, body) {             try {                     if (error) {                     console.error(error)                     return res.sendStatus(500)                 }                 if (body) {                     body=await JSON.parse(body)                     if (body.id) {                         console.log({body});                         console.log('//video upload completed');                                                  return res.sendStatus(201)                     }                     if (body.error) {                         console.error({...body.error});                         return res.sendStatus(400)                     }                     console.log({body});                     return res.sendStatus(200)                 }                 return res.sendStatus(200)             } catch (error) {                 console.log({error});                 return res.sendStatus(500)             }           }     } catch (error) {         log({error})         return res.sendStatus(500)     } } 

Please see the error carefully

{   message: "The video file you selected is in a format that we don't support.",   type: 'OAuthException',   code: 352,   error_subcode: 1363024,   is_transient: false,   error_user_title: 'Unsupported Video Format',   error_user_msg: "The video you're trying to upload is in a format that isn't supported. Please try again with a video in a supported format.",    fbtrace_id: 'ASMNMrVVh4jeY06_nDP_y9d' } 

then docomentation I am following for this functionality is facebook graph api docomentation

Tag:node.js, facebook, facebook-graph-api, facebook-javascript-sdk

Add a new comment.