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. 拉姆达表达式 追加 条件判断 Expression<Func<T, bool>>

    public static class PredicateBuilder { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效,多个 ...

  2. Objective-C中release和nil的关系

    (iphone/ipad)浅谈Objective-C中release和nil的关系 分类: iPhone/iPad开发技术2011-12-09 01:40 2515人阅读 评论(4) 收藏 举报 ui ...

  3. 实现在线阅读pdf功能--php

    在网上找了很久,想要实现一个在线阅读word,pdf文件的功能,网上的资料很多,但是提到真正怎么实现的比较少.现在我来简单说明一下,我实现的过程. 我现在只能实现在线阅读pdf(将word等转换成pd ...

  4. Linux 下通过脚本实现远程自动备份

    考虑到在本机上备份数据,一旦该机器硬盘出现故障,数据无法取出.远程手动备份数据费时费力且不及时.最好的方法就是通过脚本实现远程自动互备.但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码 ...

  5. Smarty 变量使用

    Smarty的标签都是使用定界符括起来. 默认定界符是{ 和 }, 但定界符可以被改变. 比如说在本手册,我们会假定你在使用默认的定界符. 在Smarty看来,任何在定界符之外的内容,都是静态的,或者 ...

  6. explorer.exe进程简单介绍

    explorer.exe是Windows程序管理器或者Windows资源管理器,它用于管理Windows图形壳,包括开始菜单.任务栏.桌面和文件管理.不过也发现有大量的恶意病毒木马插入到explore ...

  7. java日期时间处理小结

    这两周时间的Java开发让我感觉到JAVA语言确实把一些简单的事情搞得很复杂,比如日期时间处理,或许是考虑不同时区国际化跨平台之类的因素,但JAVA语言处理确实让我很困惑,相信身边好多开发的同事也如此 ...

  8. GridView视图

    本文实现如下效果 Test_Grid.java public class Test_Grid extends Activity { private GridView gridview; private ...

  9. [转]Laravel 4之Eloquent ORM

    Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...

  10. 使用批处理bat作为日期系统日期的前三天

    在管理server它经常是依据一天来推断载日期系统日志文件,例如,上周五,周一的需要上传日志.上传日志的日期前一天,日志文件命名的日期.这需要获得的日期的前三天.或之前n当天日期. 批量绑定vbs可以 ...