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 17 HTML / CSS
CSS3制作hover下划线动画
Mar 27 HTML / CSS
CSS3 仿微信聊天小气泡实例代码
Apr 05 HTML / CSS
CSS3解析抖音LOGO制作的方法步骤
Apr 11 HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
Apr 23 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
Html5应用程序缓存(Cache manifest)
Jun 04 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
May 19 HTML / CSS
HTML5实现移动端点击翻牌功能
Oct 23 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
Dec 07 HTML / CSS
面试必问:圣杯布局和双飞翼布局的区别
May 13 HTML / CSS
开发微信小程序之WXSS样式教程
Apr 18 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
Smarty Foreach 使用说明
2010/03/23 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
JavaScript的Function详细
2006/11/14 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
基于python socketserver框架全面解析
2017/09/21 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python实现按长宽比缩放图片
2018/06/07 Python
如何理解Python中的变量
2020/06/01 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
优秀生推荐信范文
2013/11/28 职场文书
项目考察欢迎辞
2014/01/17 职场文书
公司前台辞职报告
2014/01/19 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
工作失职检讨书
2015/01/26 职场文书
公司管理建议书
2015/09/14 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers