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 相关文章推荐
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 HTML / CSS
CSS3 Columns分列式布局方法简介
May 03 HTML / CSS
CSS3 text shadow字体阴影效果
Jan 08 HTML / CSS
纯CSS3打造属于自己的“小黄人”
Mar 14 HTML / CSS
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
Dec 29 HTML / CSS
详解CSS3:overflow属性
Nov 17 HTML / CSS
HTML5-WebSocket实现聊天室示例
Dec 15 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
Sep 06 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
Feb 19 HTML / CSS
HTML5 图片悬停放大的实现代码示例
Dec 04 HTML / CSS
html5表单的required属性使用
Jul 07 HTML / CSS
CSS精灵图的原理与使用方法介绍
Mar 17 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python简单猜数游戏实例
2015/07/09 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python生成器generator用法示例
2018/08/10 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
售后专员岗位职责
2013/12/08 职场文书
教师绩效工资方案
2014/02/01 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
招聘专员岗位职责
2014/03/07 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
实习介绍信范文
2015/05/05 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Python序列化与反序列化相关知识总结
2021/06/08 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技