0
一度開かれたサーバーにファイルをアップロードしようとしています。私は私のサービスに機能を持ち、私のファイルをアップロードするためにそのサービスを呼びます。これが私のサービス機能です。AngularJSでの非同期ファイルのアップロードの進捗状況を検出します。
function post(file) {
var file = file;
if (angular.isDefined(file)) {
return Upload.upload({
url: filesConfig.uploadFile,
data: {
file: file
}
}).then(function (response) {
return response;
},
function (error) {
return error;
},
function (evt) {
var progress = parseInt(100.0 * evt.loaded/evt.total);
console.log('progress: ' + progress + '% ' + evt.config.data.file.name);
});
}
}
最後のevt arg関数では、変数が進捗しています。私はこのようなコントローラからこのポスト関数を呼び出しています。
angular.element(document.querySelector('#fileinput')).on('change', function() {
for (var i = 0; i < this.files.length; i++) {
vm.filess.push(this.files[i]);
fileUpload.post(vm.filess[i]).then(function (response) {
console.log(response);
});
}
});
コントローラの各ファイルの進捗状況を検出して、UIの進行状況バーを表示します。進行状況を検出する方法は?
1 - 'post(file、callback)'にparamとして送信したコールバックを使用して、すべての進捗状況の変更時にコールバックを実行します。または2 - pub/subを使用して、進行状況が変わるたびにイベントをディスパッチし、コントローラ内のこのイベントにサブスクライブします。または3 - この進捗状況を参照し、すべてのステップでそれを更新した後、この参照をコントローラに注入して再生するメディエータ/マネージャ/サービスオブジェクトを使用します。または4 - あなたのサービス内の 'file.progress = progress'のような進捗値で' file'の参照を更新してください - –
あなたはコード例でそれを詳しく説明できますか? –