HTML5上传文件显示进度的实现代码


Posted in HTML / CSS onAugust 30, 2012

这里我们是结合Asp.net MVC做为服务端,您也可以是其它的服务端语言。让我们看面这个片断的HTML:

复制代码
代码如下:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" , id="form1"}))
{
<div class="row">
<label for="file">
Upload Image:</label>
<input type="file" name="fileToUpload" id="fileToUpload" multiple="multiple" 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 Image" />
</div>
<div id="progressNumber">
</div>
}

相关的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", "Home/Upload");
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) {
/* This event is raised when the server send back a response */
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.");
}

上面是就原生的Javascript,在onchange事件执行fileSelected的function,在点击button执行了uploadFile的function,这里使用XMLHttpRequest实现ajax上传文件。 注意代码在Firefox 14 可以工作,IE 9目前不支持file api,可以参加这里。 服务端的代码很简单:
复制代码
代码如下:

public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
/// <summary>
/// Uploads the specified files.
/// </summary>
/// <param name="fileToUpload">The files.</param>
/// <returns>ActionResult</returns>
[HttpPost]
public ActionResult Upload(HttpPostedFileBase[] fileToUpload)
{
foreach (HttpPostedFileBase file in fileToUpload)
{
string path = System.IO.Path.Combine(Server.MapPath("~/App_Data"), System.IO.Path.GetFileName(file.FileName));
file.SaveAs(path);
}
ViewBag.Message = "File(s) uploaded successfully";
return RedirectToAction("Index");
}
}

作者:Petter Liu
HTML / CSS 相关文章推荐
CSS3——齿轮转动关键代码
May 02 HTML / CSS
10分钟理解CSS3 FlexBox弹性布局
Dec 20 HTML / CSS
HTML5中的nav标签学习笔记
Jun 24 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
Dec 13 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
Jan 01 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
Apr 24 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
May 07 HTML / CSS
HTML5响应式(自适应)网页设计的实现
Nov 17 HTML / CSS
Html5页面中的返回实现的方法
Feb 26 HTML / CSS
详解h5页面在不同ios设备上的问题总结
Mar 01 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
Sep 27 HTML / CSS
详解flex:1什么意思
Jul 23 HTML / CSS
input元素的url类型和email类型简介
Jul 11 #HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
Jul 10 #HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
Jul 05 #HTML / CSS
关于HTML5的22个初级技巧(图文教程)
Jun 21 #HTML / CSS
关于HTML5的安全问题开发人员需要牢记的
Jun 21 #HTML / CSS
HTML5 对各个标签的定义与规定:body的介绍
Jun 21 #HTML / CSS
网易微博Web App用HTML5开发的过程介绍
Jun 13 #HTML / CSS
You might like
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
JavaScript修改css样式style
2008/04/15 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
理解javascript中的闭包
2017/01/11 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
python实现网站的模拟登录
2016/01/04 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
深入了解Python enumerate和zip
2020/07/16 Python
深入浅析Python代码规范性检测
2020/07/31 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
年度考核自我鉴定
2013/11/09 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
大学活动总结格式
2014/04/29 职场文书
考察现实表现材料
2014/05/19 职场文书
合作与交流自我评价
2015/03/09 职场文书
大学生求职自荐信
2015/03/24 职场文书
婚庆司仪开场白
2015/05/29 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL