How send base64 string audio/ogg with ajax using $http to upload file using s3-skipper

580 views Asked by At

I've a sails application. So in the backend I've node js server and in the front end I've an angular js application.

And from the frontend I want to upload some file to s3. So for that I'm using s3-skipper in the backend.

So in the frontend I've

<form id="formUpload"
    method = "post"
    action = "/bin/upload"
    enctype= "multipart/form-data" >
<input type="file" id="inFile" name="file" />
<input type="button" value="Upload" onclick="uploadFile();" />
</form>

And then to upload the file in s3 using skipper I'm accessing the file stream in the backend as:

req.file("file");

And this whole process works perfectly. Now I've another scenario when I'm recording an audio file from the browser and I want to upload the file using same s3-skipper to s3.

But in this case I don't have any html form element and input type file for obvious reason. And for the audio file I've base64 audio dataUrl:

data:audio/ogg;base64,T2dnUwACAAAAAAAAAABx+oohAAAAAH....

And as I can't use form submit I want to send the data using $http. So what I'm doing:-

var blob = $scope.dataURItoBlob(audioDataUrl, 'audio/ogg');
var formData = new FormData();
     formData.append('file', blob);
     $http({
         method: 'POST',
         url: '/file/upload/multi',
         headers: { 'Content-Type': 'multipart/form-data;' },
         data: formData

And after sending the request I can see some data being sent in the browser network.

But in the backend this is what I'm getting as req.file("file"):

{ _fatalErrors: [],
isNoop: true,
 _files: [],....

So, can anyone help me here how to upload the file properly here?

0

There are 0 answers