[英]Bootstrap progress bar visible when downloading file from java servlet
[英]Showing a progress bar when downloading a file from the server
我需要向請求下載文件的用戶顯示進度條。 我正在使用J2EE應用程序生成該文件。 用戶將提交表單數據以獲取文件。 服務器將所有提交的數據進行操作,生成PDF文件並將其發送回客戶端。
所以我想向用戶顯示進度條,直到文件到達客戶端。 有沒有辦法做到這一點?
如果我理解你,你想要顯示一個進度條,直到你的服務器准備發送文件,而不是顯示下載文件的進度。
如果這是真的,那么你正在處理一個艱難的運動。 可靠的進度條需要知道(非常精確)您正在做什么以及需要多長時間。 在您的情況下,有許多不可靠的因素(其中一個,也許是最大的因素是網絡本身)。
因此,大多數開發人員使用某種“無盡”動畫來顯示“正在進行中的工作”。
更新
根據您的評論,顯示“正在進行中的工作”動畫的最簡單方法是
$.ajax({
url: "/myscripts/myserverscript",
type: "POST",
data: {
foo: "bar"
},
dataType: "text",
beforeSend: function(xhr){
// display a progress animation
},
complete: function(xhr, status){
// hide the animation
}
...
});
在單個請求的情況下。 您還可以為( .ajaxStart()
和.ajaxStop()
)設置全局ajax事件處理程序以設置show / hide功能。
服務器端文件生成的進度條:
我們假設服務器需要很多秒才能生成文件。 此事件由原始請求(阻塞操作)觸發。 完成后,文件將被生成,並將被發送回客戶端。
同時,您希望通過其他請求(ajax)調用服務器並獲取當前為特定用戶生成的文件的百分比。
這里的膠水部分是:
文件下載進度條:
最好把它留給瀏覽器的原生對話框。
在Java中,您只需在輸入流周圍包裝一個javax.swing.ProgressMonitorInputStream,但請注意,除非服務器以分塊流模式發送,否則顯示實際上並不意味着什么,因為整個響應將在之前被讀入內存。第一個字節傳遞給Java。
使用XMLHttpRequest,您可以下載文件並顯示進度。
showProgressBar();
var xhr = new XMLHttpRequest();
xhr.open("GET", 'https://upload.wikimedia.org/wikipedia/commons/d/dd/Big_%26_Small_Pumkins.JPG', true);
xhr.responseType = "blob";
xhr.onprogress = function (e) {
console.log(e.loaded / e.total * 100);//shows downloaded percentage
setProgressBarPercentage(e.loaded / e.total * 100);
}
xhr.onload = function () {
hideProgressBar();
var urlCreator = window.URL || window.webkitURL;
var url = urlCreator.createObjectURL(this.response);
var link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('download', 'FILENAME');
link.click();
}
xhr.send();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.