function fileUpload(targetUrl) {

    // 隐藏表单名称
var inputName = '_fileselect'; // 文件尺寸
this.fileSize = 0; // 上传表单名称
var formName = ''; var callback = new Object(); // 初始化函数
function init() {
this.uploadUrl = targetUrl;
var btnObject = getFileObject();
btnObject.onchange=function(){
var fileObj = getFileObject();
var fd = createForm(fileObj);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", listenerProcess, false);
xhr.addEventListener("load", listenerLoad, false);
xhr.addEventListener("error", listenerError, false);
xhr.addEventListener("abort", listenerAbort, false);
xhr.open("POST", targetUrl);
xhr.send(fd);
};
} // 获取表单对象
function getFileObject(){
if(!document.getElementById(inputName)){
var btn=document.createElement("input");
btn.setAttribute("type","file");
btn.setAttribute("style","display:none;");
btn.setAttribute("id",inputName);
document.body.appendChild(btn);
}
return document.getElementById(inputName);
} // 选在文件
this.selectFile = function(name){
formName = name;
document.getElementById("_fileselect").click();
} // 外部流程监听
this.processListener = function(callbackProcess,callbackFinish){
callback.process = callbackProcess;
callback.finish = callbackFinish;
} // 生成表单对象
function createForm(fileObj){
var fd = new FormData();
this.fileSize = fileObj.files[0].size;
fd.append(formName, fileObj.files[0]);
return fd;
} // 处理进度响应监听
function listenerProcess(evt){
callback.process(evt.position / evt.totalSize * 100);
} // 处理完成响应监听
function listenerLoad(evt){
callback.finish(evt.target.responseText);
} // 处理错误响应监听
function listenerError(evt){} // 处理终止响应监听
function listenerAbort(evt){} // 主动初始化
init();
}

[ 调用 ]

// 实例化对象的时候,上传URL为参数
var fileObj = new fileUpload('/user_center/user_place/upload_logo'); // 上传监听 第一个参数为上传进度通知,第二个参数为上传完成服务器的返回
fileObj.processListener(function(val){
// 上传进程处理
},function(val){
var obj = eval('('+val+')');
if(obj.state=='1'){
$('#preView').attr('src',obj.url);
$('input[name="placelogo"]').val(obj.url);
}else{
alert(obj.error);
}
}); // 上传按钮点击时候触发下面方法,参数为表单名称
fileObj.selectFile('logo');

HTML5 JavaScript 文件上传的更多相关文章

  1. 【精心推荐】几款极好的 JavaScript 文件上传插件

    文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...

  2. HTML5多文件上传

    文章转载自:http://xiechengxiong.com/288.html 一个简单的HTML5多文件上传demo. 以前我们上传文件的时候,如果通过js上传,我们无法在本地直接预览图片,还得跑到 ...

  3. 几款极好的 JavaScript 文件上传插件

    文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...

  4. Javascript文件上传插件

    jQuery File Uploader 这是最受欢迎的 jQuery 文件上传组件,支持批量上传,拖放上传,显示上传进度条以及校验功能. 支持预览图片.音频和视频,支持跨域上传和客户端图片缩放,支持 ...

  5. MVC5:使用Ajax和HTML5实现文件上传功能

    引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功 ...

  6. html5拖动文件上传

    使用html5的fileReader api <!DOCTYPE html><html lang="en"><head> <meta ch ...

  7. 体验三大JavaScript文件上传库(Uppy.js/Filepond/Dropzone)

    最近发现了一个高颜值的前端上传组件Uppy.js,立即上手体验了一波,感觉还不错.然后又看到同类型的Filepond以及Dropzone.js,对比体验了一下,感觉都很优秀,但是在体验过程中,都遇到了 ...

  8. JavaScript 文件上传类型判断

    文件上传时用到一个功能,使用html元素的input标签实现, <input id="imageFile" name="imageFile1" accep ...

  9. html5 ajax 文件上传

    http://html5demos.com/dnd-upload 看这个例子看了一会儿...这个是支持拖拽的上传. 下面代码是一个简单的ajax的文件上传: function match(url,rs ...

随机推荐

  1. [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现

    这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...

  2. AngularJS 父子控制器

    <!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...

  3. HDFS配置文件内容解释

    配置概述 hadoop-env.sh 一个可由hadoop脚本调用的bourne shell文件,它制定hadoop要用的JDK环境变量.守护进程JDK选项.pid文件和log文件夹 core-sit ...

  4. Android-1

    @String 支持多语言 layout中的text文本中String都尽量定义在String.xml中,便于多语言管理. <resources> <string name=&quo ...

  5. 用 C 语言编写 Windows 服务程序的五个步骤

    Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务.为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择.本文将建立并实现一个简单的服务程序,其功能是查询系统 ...

  6. Transposed Matrix

    Transposed Matrix In linear algebra, the transpose of a matrix A is another matrix AT (also written  ...

  7. 域控制器安全策略在哪里 Windows server 2008

    Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group Policy Management(策略管理器) 展开组策略管理器选择–Forest(林 ...

  8. aop动态代理学习

    学习,顺便做个demo,方便理解. A接口有c方法,类B实现A接口,原本应该是执行B类中的c方法,可现在不这样做: 我声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口, 对外界来说B ...

  9. Merlin 的魔力: SpringLayout 管理器

    摘自http://tech.it168.com/a2009/0211/265/000000265087_all.shtml 摘自http://cache.baiducontent.com/c?m=9f ...

  10. cStringIO模块例子

    # Vorbis comment support for Mutagen # Copyright 2005-2006 Joe Wreschnig # # This program is free so ...