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中的border-radius(边框圆角)示例代码
Jul 19 HTML / CSS
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
Aug 19 HTML / CSS
css实例教程 一款纯css3实现的超炫动画背画特效
Nov 05 HTML / CSS
CSS3 3D旋转rotate效果实例介绍
May 03 HTML / CSS
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
Jul 08 HTML / CSS
Css3实现无缝滚动防抖
Sep 14 HTML / CSS
Html5实现iPhone开机界面示例代码
Jun 30 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
Nov 07 HTML / CSS
html5 viewport使用方法示例详解
Dec 02 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
Jul 07 HTML / CSS
CSS实现章节添加自增序号的方法
Jun 23 HTML / CSS
CSS中float高度塌陷问题的四种解决方案
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
初级的用php写的采集程序
2007/03/16 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php 问卷调查结果统计
2015/10/08 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
jquery实现上传图片功能
2020/06/29 jQuery
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
python字符串,数值计算
2016/10/05 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
python3.6实现学生信息管理系统
2019/02/21 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
python 解决函数返回return的问题
2020/12/05 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
高中体育教学反思
2014/01/24 职场文书
先进集体事迹材料
2014/02/17 职场文书
大学生求职信范文
2014/05/24 职场文书
教书育人演讲稿
2014/09/11 职场文书
专业见习报告范文
2014/11/03 职场文书
辞职信怎么写
2015/02/27 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL