當前位置:首頁 » 文件管理 » http上傳進度條

http上傳進度條

發布時間: 2024-05-22 19:01:25

java編程:怎麼寫進度條高手進哈

進度條有三種思路:
1.人為的劃分某些標識,達到某個標識就是完成了百分之多少。
2.如果是上傳和下載附件,可以將文件大小作為100%,上傳或下載百分之多少,就是百分之多少。
3.對進度的類型所需時間進行分類。劃出幾種時間。屬於某類,大概或平均完成時間是多少,那麼就以這個時間作為100%。然後產生進度。

但,完美的進度是不可能實現的,因為你總不能先跑一遍確定時間。而且就算完全相同的條件,跑兩遍的時間也不能一定相等的。所以我們只能通過各種技巧來使進度條更加自然真實。

最後,現在很多地方都不用進度條了,全部都是一個轉動的圓圈等等。因為當你進度卡在10%半個小時,然後瞬間漲到99%,進度條已經就沒什麼意義了。

㈡ 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;
}

}

㈢ 怎樣實現在android實現帶進度條的上傳效果

實現在android實現帶進度條的上傳效果效果如圖:


用到以下兩個類就可實現帶進度條的文件上傳:


1、CustomMultiPartEntity extends MultipartEntity,


2、HttpMultipartPost extends AsyncTask


代碼如下:


import java.io.FilterOutputStream;


import java.io.IOException;


import java.io.OutputStream;


import java.nio.charset.Charset;


import org.apache.http.entity.mime.HttpMultipartMode;


import org.apache.http.entity.mime.MultipartEntity;



public class CustomMultipartEntity extends MultipartEntity {


private final ProgressListener listener;


public CustomMultipartEntity(final ProgressListener listener) {


super();


this.listener = listener;


}


public CustomMultipartEntity(final HttpMultipartMode mode, final ProgressListener listener) {


super(mode);


this.listener = listener;


}


public CustomMultipartEntity(HttpMultipartMode mode, final String boundary,


final Charset charset, final ProgressListener listener) {


super(mode, boundary, charset);


this.listener = listener;


}


@Override


public void writeTo(final OutputStream outstream) throws IOException {


super.writeTo(new CountingOutputStream(outstream, this.listener));


}


public static interface ProgressListener {


void transferred(long num);


}



public static class CountingOutputStream extends FilterOutputStream {


private final ProgressListener listener;


private long transferred;


public CountingOutputStream(final OutputStream out, final ProgressListener listener) {


super(out);


this.listener = listener;


this.transferred = 0;


}


public void write(byte[] b, int off, int len) throws IOException {


out.write(b, off, len);


this.transferred += len;


this.listener.transferred(this.transferred);


}


public void write(int b) throws IOException {


out.write(b);


this.transferred++;


this.listener.transferred(this.transferred);


}


}


}


該類計算寫入的位元組數,我們需要在實現ProgressListener中的trasnfered()方法,更行進度條



public class HttpMultipartPost extends AsyncTask<HttpResponse, Integer, TypeUploadImage> {



ProgressDialogpd;



longtotalSize;



@Override


protectedvoidonPreExecute(){


pd= newProgressDialog(this);


pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);


pd.setMessage("Uploading Picture...");


pd.setCancelable(false);


pd.show();


}



@Override


(HttpResponse... arg0) {


HttpClienthttpClient = newDefaultHttpClient();


HttpContexthttpContext = newBasicHttpContext();


HttpPosthttpPost = newHttpPost("http://herpderp.com/UploadImage.php");



try{


= newCustomMultipartEntity(


newProgressListener() {



@Override


public void transferred(longnum){


publishProgress((int) ((num / (float) totalSize) * 100));


}


});



// We use FileBody to transfer an image


multipartContent.addPart("uploaded_file", newFileBody(


newFile(m_userSelectedImagePath)));


totalSize= multipartContent.getContentLength();



// Send it


httpPost.setEntity(multipartContent);


HttpResponseresponse = httpClient.execute(httpPost, httpContext);


String serverResponse = EntityUtils.toString(response.getEntity());



ResponseFactoryrp = newResponseFactory(serverResponse);


return(TypeImage) rp.getData();


}



catch(Exception e) {


System.out.println(e);


}


returnnull;


}



@Override


protectedvoidonProgressUpdate(Integer... progress){


pd.setProgress((int) (progress[0]));


}



@Override


protectedvoidonPostExecute(TypeUploadImageui) {


pd.dismiss();


}


}

在 transferred()函數中調用publishProgress((int) ((num / (float) totalSize) * 100));


在onProgressUpdate()實現上傳進度的更新操作

㈣ java 如何獲得文件上傳到oss的進度

上述四種方法的比較: 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 上傳多個文件是採用多線程上傳的,因 此如果你一次上傳多個文件,那就需要改伺服器端了。需要在所有線程上傳完成的情況下, 再去修改資料庫

㈤ JSP 上傳文件進度條怎麼做

使用第三方開源的吧:比如jquery的uploadify插件就可以,唯一缺點就是它是用flash顯示進度的

㈥ 使用jquery.form.js實現文件上傳及進度條前端代碼

ajax的表單提交只能提交data數據到後台,沒法實現file文件的上傳還有展示進度功能,這里用到form.js的插件來實現,搭配css樣式簡單易上手,而且高大上,推薦使用。

需要解釋下我的結構, #upload-input-file 的input標簽是真實的文件上傳按鈕,包裹form標簽後可以實現上傳功能, #upload-input-btn 的button標簽是展示給用戶的按鈕,因為需要樣式的美化。上傳完成生成的文件名將會顯示在 .upload-file-result 裡面, .progress 是進度條的位置,先讓他隱藏加上 hidden 的class, .progress-bar 是進度條的主體, .progress-bar-status 是進度條的文本提醒。

去掉hidden的class,看到的效果是這樣的
[圖片上傳失敗...(image-2c700a-1548557865446)]

將上傳事件綁定在file的input裡面,綁定方式就隨意了。
var progress = $(".progress-bar"), status = $(".progress-bar-status"), percentVal = '0%'; //上傳步驟 $("#myupload").ajaxSubmit({ url: uploadUrl, type: "POST", dataType: 'json', beforeSend: function () { $(".progress").removeClass("hidden"); progress.width(percentVal); status.html(percentVal); }, uploadProgress: function (event, position, total, percentComplete) { percentVal = percentComplete + '%'; progress.width(percentVal); status.html(percentVal); console.log(percentVal, position, total); }, success: function (result) { percentVal = '100%'; progress.width(percentVal); status.html(percentVal); //獲取上傳文件信息 uploadFileResult.push(result); // console.log(uploadFileResult); $(".upload-file-result").html(result.name); $("#upload-input-file").val(''); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log(errorThrown); $(".upload-file-result").empty(); } });

[圖片上傳失敗...(image-3d6ae0-1548557865446)]

[圖片上傳失敗...(image-9f0adf-1548557865446)]

更多用法可以 參考官網

㈦ winform用http上傳文件或下載文件進度條如何實現

winform用http上傳?不知道你具體是什麼意思

1.如果對端是winform服務端的話,建立socket連接發送位元組流,用進度條控制項實時獲取進度信息,可以發送一個自己就顯示一個比例

2.如果對端是webservice的話那就按照調用一次方法刷新一次進度,但是這里有問題,webservice作為對端接收的話不能一次處理大量數據,會導致頁面腳本超時,大概在45秒左右。

熱點內容
冗餘壓縮發 發布:2025-01-17 21:59:17 瀏覽:931
whatsappandroid 發布:2025-01-17 21:59:16 瀏覽:944
iptables限制ip訪問 發布:2025-01-17 21:38:01 瀏覽:174
易拉罐壓縮機 發布:2025-01-17 21:25:35 瀏覽:924
在c語言是什麼意思啊 發布:2025-01-17 21:21:02 瀏覽:516
re0腳本 發布:2025-01-17 21:13:34 瀏覽:305
甜蜜家園密碼箱有什麼用 發布:2025-01-17 21:07:28 瀏覽:48
有教少兒編程 發布:2025-01-17 20:55:37 瀏覽:37
直播背腳本 發布:2025-01-17 20:50:18 瀏覽:410
ftp移動文件的mv命令 發布:2025-01-17 20:45:53 瀏覽:405