I am developing a chat application similar to WhatsApp.
I need to send Video & Audio messages.
Currently I am encoding the selected file using base64 and then decoding it on server side and saving that file on server.
This way it takes lot of time to upload that file, and the base64 string gets too large.
Here is the current way I am doing this:
Meteor.methods({
sendVideoMessage: function (params) {
try {
if(!params || !Meteor.userId()){
return serverHelperClass.prepareResponse(5, 'UnAuthorized!', {}, 'sendVideoMessage');
}
if(!params.videoBase64 || !params.videoFormat){
return serverHelperClass.prepareResponse(3, 'invalid file', {}, 'sendVideoMessage');
}
if(!helperClass.validVideoExtensions[params.videoFormat]){
return serverHelperClass.prepareResponse(3, 'invalid video format', {}, 'sendVideoMessage');
}
// Defining Path where video will be uploaded
var path = serverHelperClass.getVideoDirPath();
// Preparing file names
var fileName = helperClass.generateNewFileName() + '.' + params.videoFormat;
// Saving Images to directory
serverHelperClass.saveBase64Video(params.videoBase64, path, fileName, true);
params.videoBase64 = fileName;
Messages.insert({ userId: Meteor.userId(), message: params.fileName });
var url = helperClass.prepareUrl(params.videoBase64, 'getVideoDirUrl');
return serverHelperClass.prepareResponse(200, 'Success!', url, 'sendVideoMessage');
}
catch (e) {
console.dir(e);
}
}
})
What is the proper way to handle large files?
Is there anyway I can upload as multipart or chunks?
What could be the possible efficient way to upload large file using Meteor methods?