У меня есть вебсервис присылку файл Excel, вызов производится с помощью Ajax со следующей логикой:Скачать с <iframe>: работает только один раз
- Отправить «создать файл» запрос.
- Запросите прогресс, сервер вернет номера от 0 до 100, клиент обновит индикатор выполнения.
- После получения 100 обновления элемента «Src» из фрейма так, чтобы начать закачку
Скачать с IFRAME есть, до сих пор, единственный способ сделать работу скачать с интернет-проводник, так что я хотел бы сохранить его.
Это мой IFrame и прогресс бар:
<iframe width="1" height="1" style="display:none" src="{{downloadLink}}"></iframe>
<progressbar class="progress" value="reportProgress" type="success" >
{{reportProgressL}}
</progressbar>
И это мой угловой JS процедура:
$scope.startDownload = function() {
$scope.reportProgress = 0;
$scope.reportProgressL = "0%";
var promise = $http.get('/myServiceCall/createFile');
promise.then(
function(payload){
console.log('success ');
console.log(payload);
},
function(error){
$scope.showAlert('danger',error);
});
$scope.askProgress();
};
$scope.askProgress = function(){
$http.get('/myServiceCall/progress').success(function(response, status, headers, config){
$scope.reportProgress = response.data;
if(response.data < 100){
$scope.reportProgressL = response.data+"%";
$timeout(function() {$scope.askProgress();}, 1000);
}else{
console.log('Server elaboration completed, download should start shortly...');
$scope.reportProgressL = "Done!";
$scope.downloadLink = '/myServiceCall/getFile'; //setting the src iframe attribute: this will start download
}
}).error(function(err, status, headers, config){
alert('Error: '+err+" "+status);
});
};
Приведенный выше код работает отлично ... но только один раз! Если перезагрузка страницы не будет установлена, атрибут «src» снова ничего не сделает. Зачем?
Ницца, он работает! – Phate
Awesome. Рад, что смог помочь. – JosiahDaniels