Берете ng-file-upload и:
1) привязываетесь к его событию в духе ngf-select="ctrl.filesSelected($files)", в контроллере делаете метод filesSelected, в который первым параметром будут попадать выбранные пользователем файлы (их может быть несколько в общем случае)
2) используете его API для загрузки файла
Upload.upload({
url: 'upload/url',
data: {file: file, 'username': $scope.username}
}).then(function (resp) {
console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);
}, function (resp) {
console.log('Error status: ' + resp.status);
}, function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
});
последний обработчик события - прогресс загрузки.
3) то же самое, что и 2, но в 2 вы запускаете .upload сразу после того, как пользователь выбрал файл, а в 3 по нажатию submit
4) каких полей? Кукурузных?