我试图将文件从html视图传递给角度控制器,为此我在视图中使用ng-file-select。我的视图代码如下:
<div ng-controller="fileController">
<input type="file" ng-model="fibQuestion.fibContentLanguage.colUploadPaperUrl" name="PaperDocUrl" ng-file-select="onPaperFileSelect($files)" onclick="this.value = null" id="forPracticalTestPaper" />
<div>
<input type="button" id="save" class="btn btn-success" value="Save" ng-click="PaperFileProcessing()" />
</div>
</div>
但是在这里,ng-file-select =“onPaperFileSelect($ files)”无法将文件传递给控制器。控制器代码是:
app.controller('fileController',function($scope) {
$scope.onPaperFileSelect = function ($files) {
if ($scope.verifiedFileType($files[0].name, 'paper')) {
$scope.saveFileLoacation = '~/UploadedFiles/PracticalTestPaperFiles/';
$scope.yesDisable = false;
$scope.uploadedPaper = $files;
$('#upload-paper-file-info').text($files[0].name);
$scope.showPaperDeleteButton = true;
}
};
$scope.verifiedFileType = function (fileName, fileType) {
var extension = (fileName.substring(fileName.lastIndexOf('.'), fileName.length)).toLowerCase();
if (extension == ".pdf") {
return true;
}
else {
alert("file extension not valid for " + fileType + ". available extensions are pdf.");
angular.element("input[type='file']").val(null);
return false;
}
};
$scope.PaperFileProcessing = function () {
$scope.upload = [];
$scope.yesDisable = true;
var fileBank = $scope.uploadedPaper;
console.log(fileBank);
var status = false;
var i = fileBank.length;
console.log(i);
};
});
何时,我按下保存按钮,调用函数PaperFileProcessing(),然后,var fileBank = $ scope.uploadedPaper;显示未定义。
我认为你的代码缺少某种“承诺”等待完全上传的文件,不是吗?也许是这样的:
// returns a promise
upload.then(function(resp) {
// file is uploaded successfully
console.log('file ' + resp.config.data.file.name + 'is uploaded successfully. Response: ' + resp.data);
}, function(resp) {
// handle error
}, function(evt) {
// progress notify
console.log('progress: ' + parseInt(100.0 * evt.loaded / evt.total) + '% file :'+ evt.config.data.file.name);
});