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. 对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识

    对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识   初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相 ...

  2. JS window对象的top、parent、opener含义

    .top 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. .opener opener用于在window.open的页面引用执行该window ...

  3. 转载--http协议学习和总结

    http的了解一直停留在一知半解的程度,今天看到阿蜜果大大的博客,果断学习了,这里做个转载,希望阿蜜果大大不要怪罪~~ 3.1 Cookie和Session Cookie和Session都为了用来保存 ...

  4. DJANGO学习一则

    这个WEB框架,可以好好研究,相信很快就会用在工作上的. 相关文件: settings.py """ Django settings for djangoweb proj ...

  5. LeetCode_Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  6. 【转】各个层次的gcc警告 #pragma GCC diagnostic ignored "-Wunused-parameter" --不错

    原文网址:http://blog.csdn.net/lizzywu/article/details/9419145 各个层次的gcc警告从上到下覆盖 变量(代码)级:指定某个变量警告 int a __ ...

  7. Linux下串口编程入门

    简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...

  8. Hdu3640-I, zombie(模拟+二分)

    The "endless" model in "I, zombie" of "Plants vs. Zombies" is my favou ...

  9. 值传递 & 引用传递

    以下程序的输出结果是? public class Example { String str = new String("good"); char[] ch = { 'a', 'b' ...

  10. ubuntu 14.04 下试用Sublime Text 3

    很多源代码都没有IDE支持的,尤其是开源的源代码.从github上下载的,很多也不用IDE.包括我自己公司的代码,基本都是脚本,也不用IDE.通常情况下,都是用notepad++.UE之类的文本编辑器 ...