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 17 HTML / CSS
css3动画效果小结(推荐)
Jul 25 HTML / CSS
浅谈CSS3特性查询(Feature Query: @supports)功能简介
Jul 31 HTML / CSS
css3进阶之less实现星空动画的示例代码
Sep 10 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
Sep 13 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
Mar 02 HTML / CSS
Canvas实现保存图片到本地的示例代码
Jun 28 HTML / CSS
用canvas做一个DVD待机动画的实现代码
Apr 12 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
Nov 26 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
Apr 07 HTML / CSS
使用CSS实现黑白格背景效果
Jun 01 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个人网站架设连环讲(二)
2006/10/09 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
在模板页面的js使用办法
2010/04/01 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
2017/05/12 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
军训新闻稿范文
2015/07/17 职场文书
银行工作心得体会范文
2016/01/23 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang