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

html5進度條上傳

發布時間: 2022-09-03 09:56:11

⑴ 如何在手機瀏覽器中運用HTML5的文件API實現上傳多圖功能

Html5終於解決了上傳文件的同時顯示文件上傳進度的老問題。現在大部分的網站用Flash去實現這一功能,還有一些網站繼續採用Html <form>with enctype=multipart/form-data,但是需要修改伺服器端可用才能顯示給用戶文件上傳的進度。本質上你需要做的工作是在伺服器端接收一個文件時,你發送給它一個位元組流,所以你需要知道你已經接收到多少位元組並以某種方式傳達這些信息給客戶端瀏覽器,在這個過程一直在不斷的進行文件的上傳。這種方式運行的非常好,不像Flash上傳那這樣充滿了問題(特別是處理大文件上傳的時候),然而這種方法是相當復雜的並且聽起來不容易理解,因為你本質上是接管了整個伺服器端的處理(獲取位元組流的時候)同時包括了在伺服器端實現multipart/form-data協議,伴隨一系列的其他事情。
使用Html5 上傳文件
XMLHttpRequest 在Html5 規范中已經有全新的變化,規定了XMLHttpRequest Level 2規范(目前最新版本)包含下列新的特性:
處理位元組流,例如作為上傳或者下載的File,Blob,FormData對象
上傳或者下載中的進度事件
跨站點請求
允許創建匿名請求
可以設置請求超時
在這篇文章中我們將能夠更清楚的看到#1和#2兩個特性。通常,上傳文件用XMLHttpRequest並且提供上傳進度信息給最終的用戶,需要注意的是這種方式解決了不需要伺服器端做任何改變,至少是目前處理multipart/form-data協議。所以伺服器端的處理邏輯保留不變,這使得開發者適應這種技術相當容易。
圖1:文件上傳畫面-准備上傳 圖2:顯示上傳完成畫面
注意:上面的圖片中,信息提示區域是提供給用戶的:
當前選中文件的信息
文件名
文件大小
文件類型
上傳完成多少的百分比進度條
上傳速度或者上傳帶寬
距離上傳完成大概還有多長時間
已上傳文件大小
伺服器端的響應
上面第6項或許看起來不重要,但事實上是相當重要的。因為我們用XMLHttpRequest,上傳發生在後台,頁面沒有發生跳轉等任何變化,所以對於你用它處理其他一些事情來說是一個非常好的特性。
Html5 Progress Event
對於Html5 Progress Events規范,Html5 Progess Events提供了下列與本次討論相關的信息
total - 總的位元組數
loaded - 到目前為止上傳的位元組數
lengthComputable - 可計算的已上傳位元組
請注意到我們需要用兩個信息去計算要顯示給用戶的其他所有信息。要計算出來其他的信息通過上面我們得到信息是相當容易的,但是那需要一些額外的代碼並且創建一個定時器。
Html5 Progress Event 應該是什麼
考慮到有一部分人想更好的提供給用戶所有的信息,所以Html5 Progress Event應該更好的滿足需要,因為它給瀏覽器供應商提供這些額外信息是相當簡單的,所以建議progress event應該修改成如下:
total - 總的位元組數
loaded - 到目前為止上傳的位元組數
lengthComputable - 可計算的已上傳位元組
transferSpeed long類型
timeRemaining javaScript 日期對象
Html5 上傳 用XMLHttpRequest
瀏覽器支持情況
支持這一特性的瀏覽器最低版本
Firefox 4.0 beta 6
Chrome 6
Safari 5.02
IE 9 Beta and Opera 10.62 不支持這一特性
簡單的示例
下面是一個完整的Html頁麵包含了實現文件上傳並帶有進度提示的JavaScript代碼,只是實現了基本的功能,感興趣的可以自己做擴展。 需要吧上傳介面修改成自己服務的。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

<!DOCTYPE html>
<html>
<head>
<title>Upload Files using XMLHttpRequest - Minimal</title>
<script type="text/javascript">
function fileSelected() {
var file = document.getElementById('fileToUpload').files[0];
if (file) {
var fileSize = 0;
if (file.size > 1024 * 1024)
fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
else
fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
}
}
function uploadFile() {
var fd = new FormData();
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "upload.do");//修改成自己的介面
xhr.send(fd);
}
function uploadProgress(evt) {
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
}
else {
document.getElementById('progressNumber').innerHTML = 'unable to compute';
}
}
function uploadComplete(evt) {
/* 伺服器端返回響應時候觸發event事件*/
alert(evt.target.responseText);
}
function uploadFailed(evt) {
alert("There was an error attempting to upload the file.");
}
function uploadCanceled(evt) {
alert("The upload has been canceled by the user or the browser dropped the connection.");
}
</script>
</head>
<body>
<form id="form1" enctype="multipart/form-data" method="post" action="Upload.aspx">
<div class="row">
<label for="fileToUpload">Select a File to Upload</label><br />
<input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/>
</div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
<input type="button" onclick="uploadFile()" value="Upload" />
</div>
<div id="progressNumber"></div>
</form>
</body>
</html>

⑵ 如何通過js HTML5上傳示例代碼

HTML5版本,只要支持HTML5的瀏覽器都可以正常使用,並對觸摸屏(手機,平板)進行了優化
IE9+ Firefox Chrome Opera
Safari IPhone4 iPad2 Android 2.1CFUpdate HTML5版本,只要支持HTML5的瀏覽器都可以正常使用,並對觸摸屏(手機,平板)進行了優化
IE9+ Firefox
Chrome Opera Safari IPhone4 iPad2 Android 2.1

⑶ 如何用js+html+server端代碼實現上傳文件並帶進度條

直接使用一個上傳組件就行了,沒必要自己實現的。
建議使用網路提供的webuploader文件上傳插件可以輕松實現你的需求

⑷ 前端上傳文件實時顯示進度條和上傳速度的工作原理是怎樣的

後端的責任。

⑸ 誰懂如何寫html5帶有進度條的圖片上傳的代碼嗎

可以自己用div畫一個啊,父子div,父div寬度固定,子div隨著進度寬度動態改變。子div設置背景顏色
--itjob

⑹ html5怎麼控制進度條

<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<title>Inserttitlehere</title>
</head>
<style>
.jdtbox{
padding:10px0;
}

.jdt_dbg{
background:#fce5e5;
width:196px;
height:18px;
border-radius:10px;
-webkit-border-radius:10px;
overflow:hidden;
border-top:1pxsolid#f9d1d1;
}

.jdt_mbg{
background:#f12938;
height:18px;
width:75%;
height:20px;
}
</style>
<scripttype="text/javascript">
$(function(){
$(".jdt_mbg").animate({
width:"50%",
},1000);
});
</script>
<body>
<formaction="http://192.168.1.106:8080/app/img/multiUpload"method="post"enctype="multipart/form-data"name="upload_form">
<label>選擇圖片文件</label>
<inputname="imgFile"type="file"multiple="multiple"accept="image/gif,image/jpeg"/>
<inputname="upload"type="submit"value="上傳"/>
</form>
<divclass="jdtbox">
<divclass="jdt_dbg">
<divclass="jdt_mbg"style="width:${investDetail.percent*100"></div>
</div>
</div>
</body>
</html>

⑺ 如何用html5在網頁上設置進度條

首先,我們製作的這個進度條並沒有後台數據作為支撐,所以是一個靠js實現的一個簡單的頁面。

我們首先需要新建一個html5的頁面,其使用的progress元素實在html5時代才出現的。

我們在新建的頁面中,輸入一個段落標簽,一個進度條,一個button按鈕。

然後,我們需要設置一下進度條顯示的進度。value代表從多少開始,max代表到多少結束。我們做的是百分比形式的,應該寫成這樣的。

這些做好之後,我們需要書寫兩個小的事件,實現原理大體上是滑鼠單擊下載按鈕,開始下載變為正在下載百分之多少,等到達到我們預設的時間後顯示下載完成。

我們之前已經給p標簽和progress標簽分別賦予了不同的id,我們需要獲取到這兩個元素,並將他們賦給兩個變數。

我們還要將progress的初始值設為0,當滑鼠單擊的時候,我們以一定的時間為周期調用寫好的事件。

函數寫好之後,我們在瀏覽器中調試,點擊下載按鈕之後會在300ms內完成下載時間。

⑻ jsp 在html5中實現 斷點續傳 進度條 要完成的案例,包括 jsp servlet

可以把進度信息放在cookie里,下次打開瀏覽器,到上傳頁面以後,從cookie中上次的讀取進度信息,上傳時,讀取上傳文件到上次進度位置,繼續上傳

⑼ 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;
}
}
});

熱點內容
fc加密數字資產 發布:2024-10-12 12:19:12 瀏覽:461
大王卡可以緩存視頻嗎 發布:2024-10-12 12:14:52 瀏覽:659
壓縮臨時文件 發布:2024-10-12 12:14:04 瀏覽:61
如何手機隱藏wifi密碼 發布:2024-10-12 11:12:16 瀏覽:534
Android70精簡 發布:2024-10-12 11:12:10 瀏覽:749
伺服器怎麼處理數據 發布:2024-10-12 11:02:57 瀏覽:550
求平方根的演算法 發布:2024-10-12 10:58:36 瀏覽:441
sqlserverin字元串 發布:2024-10-12 10:57:33 瀏覽:517
手機高耗電怎麼關閉安卓 發布:2024-10-12 10:53:38 瀏覽:639
sql語句多條件查詢 發布:2024-10-12 10:40:02 瀏覽:194