I'm attempting to use the ng-file-upload directive to provide file upload functionality in my angular app.
I've got it working for the most part - I can select multiple files and loop through to grab the file name and file types. I just can't seem to figure out where the actual binary data of each file is stored in the file object.
I tried using the approach outlined in this post - AngularJS Upload a file and send it to a DB, but that results in a an error that "$q is not defined".
function create_blob(file) {
    var deferred = $q.defer();
    var reader = new FileReader();
    reader.onload = function () {
        deferred.resolve(reader.result);
    };
    reader.readAsDataURL(file);
    return deferred.promise;
}
So then I tried the approach outlined in this post - Send an uploaded image to the server and save it in the server, but again I'm running into an error reading "dataURI.split is not a function".
function dataURItoBlob(dataURI) {
    var binary = atob(dataURI.split(',')[1]);
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    var array = [];
    for (var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
    }
    return new Blob([new Uint8Array(array)], {
        type: mimeString
    });
}
The code I'm using is as follows:
function create_blob(file) {
    var deferred = $q.defer();
    var reader = new FileReader();
    reader.onload = function () {
        deferred.resolve(reader.result);
    };
    reader.readAsDataURL(file);
    return deferred.promise;
}
function dataURItoBlob(dataURI) {
    var binary = atob(dataURI.split(',')[1]);
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    var array = [];
    for (var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
    }
    return new Blob([new Uint8Array(array)], {
        type: mimeString
    });
}
$scope.uploadFiles = function (files) {
    $scope.files = files;
    angular.forEach(files, function (file) {
        if (file && !file.$error) {
            //var reader = new FileReader();
            //console.log(reader.readAsDataURL(file));
            //var binary = create_blob(file);
            var fileBinary = dataURItoBlob(file);
            $http({
                url: root + '/DesktopModules/ServiceProxy/API/NetSuite/InsertCaseFile',
                method: "POST",
                //headers: { 'caseId': id, 'fileName': file.name, fileContent: $.base64.encode(file) }
                headers: { 'caseId': id, 'fileName': file.name, fileContent: fileBinary }
            }).
            success(function (data, status, headers, config) {
                //if (data == true) {
                //    getCase();
                //    $scope.newMessage = "";
                //    //toaster.pop('success', "", "Message succesfully submitted.",0);
                //}
            }).
            error(function (data, status, headers, config) {
            });
            file.upload.progress(function (evt) {
                file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
            });
        }
    });
}
What am I overlooking?
 
     
    