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开启硬件加速的使用和坑
Aug 21 HTML / CSS
CSS3弹性布局内容对齐(justify-content)属性使用详解
Jul 31 HTML / CSS
css3弹性盒模型实例介绍
May 27 HTML / CSS
html5+css3之动画在webapp中的应用
Nov 21 HTML / CSS
css 元素选择器的简单实例
May 23 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
Jan 09 HTML / CSS
基于HTML5 FileSystem API的使用介绍
Apr 24 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
Aug 06 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
Jul 13 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
May 19 HTML / CSS
CSS实现章节添加自增序号的方法
Jun 23 HTML / CSS
css 边框添加四个角的实现代码
Oct 16 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php文件读取方法实例分析
2015/06/20 PHP
万能的php分页类
2017/07/06 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python3读取zip文件信息的方法
2015/05/22 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python多进程机制实例详解
2015/07/02 Python
Python正则表达式使用经典实例
2016/06/21 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
好的自荐信的要求
2013/10/30 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
linux中nohup和后台运行进程查看及终止
2021/06/24 Python