文件上傳進度條-九游会j9娱乐平台
① 前端上傳文件實時顯示進度條和上傳速度的工作原理是怎樣的
xhr對象的upload.onprogress事件在上傳過程中會多次回調
可以獲取到當前上傳的位元組數、總位元組數、時間戳等信息
根據上傳位元組數和總位元組數計算上傳百分比
根據時間戳可以判斷兩次progress事件間隔,再判斷此期間內的上傳位元組數,做個除法就是上傳速度
② jsp 上傳文件進度條怎麼做
使用第三方開源的吧:比如jquery的uploadify插件就可以,唯一缺點就是它是用flash顯示進度的
③ php 文件上傳,如何實現進度條功能
用flash文件上傳插件
如:http://ke..com/view/1332553.html?wtp=tt
php創始者也寫了一個php的擴展可以實現,麻煩,不如flash上傳插件簡單,qq,的相冊都用flash傳
④ java實現文件上傳及進度條的幾種做法 詳細�0�3
4、剛剛提醒了我,還可以直接開發瀏覽器插件。 上述四種方法的比較: 1、開發簡單,由於要定時起一個http 連接去獲得進度信息,因此,發生的連接請求也增多 ,另外,在低速的情況下,常常會出各種各樣的bug,網路環境的差異,還造成那個周期很 難選擇。 2、開發較復雜,comet 本身需要伺服器的支持,這樣tomcat 至少得選6.0,否則伺服器長連 接,壓力肯定受不了,但是,性能相對好一些,由於一次上傳實際上只啟動了兩個http 鏈接 請求,比起ajax 來說,那是要少很多請求了。另外一個優點是,comet 將使得伺服器可以主 動將進度情況匯報給客戶端,因此,客戶端的進度條相對來說,要准確一點。 3、目前看來解決方案最好的一個了,雖然開發需要涉及到 flash、javascript、以及 java 的 開發,但是代碼量都不是很多,因此,復雜程度相對屬於中等程度。但是flash 也有幾個問 題:第一、瀏覽器 flash 版本兼容問題,第二、flash 是通過獲得發送數據的進度來體現進度 條的,因此雖然不需要伺服器端開發進度部分的代碼,但是進度的展現有些不是很准確,經 常會有一開始速度很快,但是後面越來越慢的情況。 4、就不說了,開發肯定是最麻煩的,但是進度條效果肯定是最好的,但要給每種瀏覽器都 要搞個插件,還是比較痛苦的。 總結一下,希望對大家有幫助。 2 其實很麻煩的,之前試過,會有下面幾個問題: 第一、伺服器端一定要選擇支持http 長連接的伺服器,否則操作系統的線程限制,會導致並 發降低。 第二、除非原來就採用的是comet 的進度方式,否則,你要把周期獲得進度的方式,改成 comet 的方式,那很郁悶的,comet 要伺服器主動把進度信息用javascript 的方式發回客戶端 ,所以需要把結構轉化為javascript 調用才行。 第三、對於不同的瀏覽器,處理 javascript 的方式是不一樣的,我試驗的結果是,ie 會在收 到一定數量的javascript 之後才執行,所以雖然我在伺服器端每次都調用了flush 方法,但 是界面上還是需要等一段時間才能響應。而這段時間又不好控制了,因為上傳文件大小的不 一樣,導致了下發的javascript 數量也不一樣,所以基本很難達到flash 那樣的效果。 其實如果已經決定採用flash 了,那就不需要再去修改伺服器端的代碼了,因為那個進度信 息伺服器發不發都不會影響到代碼的執行,反正flash 本身已經提供了進度指示了,所以, 說簡單地,要改成flash 上傳,你直接做個flash 客戶端就好了,不需要再改伺服器端了。 對了,還有一種情況需要改伺服器端,那就是flash 上傳多個文件是採用多線程上傳的,因 此如果你一次上傳多個文件,那就需要改伺服器端了。需要在所有線程上傳完成的情況下, 再去修改資料庫。
⑤ 上傳文件時怎麼顯示上傳的進度
您好,我來為您解答:
1.request.binaryread 和 ajax接合
2. flash 和request.binaryread
以上兩種都非常的麻煩。沒有什麼好的解決方法,而且上傳的那個文件通常單獨放在一個文件裡面。。因為用了request.binaryread,那麼 querystring,form等都不能用了。
如果我的回答沒能幫助您,請繼續追問。
⑥ html5文件上傳實現進度條需要後端嗎
不需要後端的,前端自己判斷,代碼如下:
function uploadfile(){
// 獲取上傳文件,放到 formdata對象裡面
var pic = $("#myhead").get(0).files[0];
var formdata = new formdata();
formdata.append("file" , pic);
$.ajax({
type: "post",
url: "upload",
data: formdata ,//這里上傳的數據使用了formdata 對象
processdata : false,
//必須false才會自動加上正確的content-type
contenttype : false ,
//這里我們先拿到jquery產生的 xmlhttprequest對象,為其增加 progress 事件綁定,然後再返回交給ajax使用
xhr: function(){
var xhr = $.ajaxsettings.xhr();
if(onprogress && xhr.upload) {
xhr.upload.addeventlistener("progress" , onprogress, false);
return xhr;
}
}
});
⑦ 如何在上傳文件里添加進度條顯示
推薦你使用swfupload,挺好的一個插件,並且還支持各種老式的瀏覽器,還支持客戶端過濾大小以及文件類型。
⑧ 前端上傳文件實時顯示進度條和上傳速度的工作原理是怎樣的
後端的責任。
⑨ java多文件上傳顯示進度條
使用 apache fileupload ,spring mvc jquery1.6x , bootstrap 實現一個帶進度條的多文件上傳,由於fileupload 的局限,暫不能實現每個上傳文件都顯示進度條,只能實現一個總的進度條,效果如圖:
packagecom.controller;
importjava.util.list;
importjavax.servlet.http.httpservletrequest;
importjavax.servlet.http.httpservletresponse;
importjavax.servlet.http.httpsession;
importorg.apache.commons.fileupload.fileitemfactory;
importorg.apache.commons.fileupload.progresslistener;
importorg.apache.commons.fileupload.disk.diskfileitemfactory;
importorg.apache.commons.fileupload.servlet.servletfileupload;
importorg.apache.log4j.logger;
importorg.springframework.stereotype.controller;
importorg.springframework.web.bind.annotation.requestmapping;
importorg.springframework.web.bind.annotation.requestmethod;
importorg.springframework.web.bind.annotation.responsebody;
importorg.springframework.web.servlet.modelandview;
@controller
{
loggerlog=logger.getlogger(fileuploadcontroller.class);
/**
*upload上傳文件
*@paramrequest
*@paramresponse
*@return
*@throwsexception
*/
@requestmapping(value="/upload.html",method=requestmethod.post)
publicmodelandviewupload(httpservletrequestrequest,
httpservletresponseresponse)throwsexception{
finalhttpsessionhs=request.getsession();
modelandviewmv=newmodelandview();
booleanismultipart=servletfileupload.ismultipartcontent(request);
if(!ismultipart){
returnmv;
}
//createafactoryfordisk-basedfileitems
fileitemfactoryfactory=newdiskfileitemfactory();
//createanewfileuploadhandler
servletfileuploapload=newservletfileupload(factory);
upload.setprogresslistener(newprogresslistener(){
publicvoipdate(longpbytesread,longpcontentlength,intpitems){
processinfopri=newprocessinfo();
pri.itemnum=pitems;
pri.readsize=pbytesread;
pri.totalsize=pcontentlength;
pri.show=pbytesread "/" pcontentlength "byte";
pri.rate=math.round(newfloat(pbytesread)/newfloat(pcontentlength)*100);
hs.setattribute("proinfo",pri);
}
});
listitems=upload.parserequest(request);
//parsetherequest
//processtheuploadeditems
//iteratoriter=items.iterator();
//while(iter.hasnext()){
//fileitemitem=(fileitem)iter.next();
//if(item.isformfield()){
//stringname=item.getfieldname();
//stringvalue=item.getstring();
//system.out.println("thisiscommonfeild!" name "=" value);
//}else{
//system.out.println("thisisfilefeild!");
//stringfieldname=item.getfieldname();
//stringfilename=item.getname();
//stringcontenttype=item.getcontenttype();
//booleanisinmemory=item.isinmemory();
//longsizeinbytes=item.getsize();
//fileuploadedfile=newfile("c://" filename);
//item.write(uploadedfile);
//}
//}
returnmv;
}
/**
*process獲取進度
*@paramrequest
*@paramresponse
*@return
*@throwsexception
*/
@requestmapping(value="/process.json",method=requestmethod.get)
@responsebody
publicobjectprocess(httpservletrequestrequest,
httpservletresponseresponse)throwsexception{
return(processinfo)request.getsession().getattribute("proinfo");
}
classprocessinfo{
publiclongtotalsize=1;
publiclongreadsize=0;
publicstringshow="";
publicintitemnum=0;
publicintrate=0;
}
}
⑩ ajax文件上傳進度條如何實現(jquery版本
前端要做的就是設置一個定時器通過介面去後台獲取當前上傳進度是多少,然後渲染出進度條就行。當進度達到100%時清除定時器。