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的新特性介绍
Oct 31 HTML / CSS
css3中检验表单的required,focus,valid和invalid样式
Feb 21 HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
Jun 15 HTML / CSS
html Table 表头固定的实现
Jan 22 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
Mar 25 HTML / CSS
html5 视频播放解决方案
Nov 06 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
Mar 01 HTML / CSS
详解canvas绘图时遇到的跨域问题
Mar 22 HTML / CSS
利用canvas实现图片压缩的示例代码
Jul 17 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
Apr 27 HTML / CSS
CSS实现单选折叠菜单功能
Nov 01 HTML / CSS
使用CSS实现百叶窗效果示例代码
May 07 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实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
javascript连续赋值问题
2015/07/08 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue-router传参用法详解
2019/01/19 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
Python中的pprint折腾记
2015/01/21 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python input函数使用实例解析
2019/11/22 Python
python实现滑雪者小游戏
2020/02/22 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
班组长的岗位职责
2013/12/09 职场文书
开会迟到检讨书
2014/02/03 职场文书
项目合作协议书
2014/09/23 职场文书
事业单位聘任报告
2015/03/02 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
实用求职信模板范文
2019/05/13 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android