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色彩模式有哪些?CSS3 HSL色彩模式的定义
Apr 26 HTML / CSS
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
Sep 10 HTML / CSS
一篇文章带你学习CSS3图片边框
Nov 04 HTML / CSS
CSS3 实现图形下落动画效果
Nov 13 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
Jan 09 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
Mar 29 HTML / CSS
canvas使用注意点总结
Jul 19 HTML / CSS
使用phonegap进行本地存储的实现方法
Mar 31 HTML / CSS
浅谈HTML5 Web Worker的使用
Jan 05 HTML / CSS
HTML5 3D旋转相册的实现示例
Dec 03 HTML / CSS
Html5踩坑记之mandMobile使用小记
Apr 02 HTML / CSS
html+css实现滚动到元素位置显示加载动画效果
Aug 02 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
php4的session功能评述(一)
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
使用matplotlib画散点图的方法
2018/05/25 Python
Python用for循环实现九九乘法表
2018/05/31 Python
详解python:time模块用法
2019/03/25 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
sort命令的作用和用法
2013/08/25 面试题
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
大学生最新职业生涯规划书范文
2014/01/12 职场文书
青年文明号服务承诺
2014/03/31 职场文书
主题教育活动总结
2014/05/05 职场文书
四风问题查摆材料
2014/08/25 职场文书
法人代表证明书格式
2014/10/01 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
Django drf请求模块源码解析
2021/06/08 Python
Java8中Stream的一些神操作
2021/11/02 Java/Android