HTML5 JavaScript 文件上传
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 文件上传的更多相关文章
- 【精心推荐】几款极好的 JavaScript 文件上传插件
文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...
- HTML5多文件上传
文章转载自:http://xiechengxiong.com/288.html 一个简单的HTML5多文件上传demo. 以前我们上传文件的时候,如果通过js上传,我们无法在本地直接预览图片,还得跑到 ...
- 几款极好的 JavaScript 文件上传插件
文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...
- Javascript文件上传插件
jQuery File Uploader 这是最受欢迎的 jQuery 文件上传组件,支持批量上传,拖放上传,显示上传进度条以及校验功能. 支持预览图片.音频和视频,支持跨域上传和客户端图片缩放,支持 ...
- MVC5:使用Ajax和HTML5实现文件上传功能
引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功 ...
- html5拖动文件上传
使用html5的fileReader api <!DOCTYPE html><html lang="en"><head> <meta ch ...
- 体验三大JavaScript文件上传库(Uppy.js/Filepond/Dropzone)
最近发现了一个高颜值的前端上传组件Uppy.js,立即上手体验了一波,感觉还不错.然后又看到同类型的Filepond以及Dropzone.js,对比体验了一下,感觉都很优秀,但是在体验过程中,都遇到了 ...
- JavaScript 文件上传类型判断
文件上传时用到一个功能,使用html元素的input标签实现, <input id="imageFile" name="imageFile1" accep ...
- html5 ajax 文件上传
http://html5demos.com/dnd-upload 看这个例子看了一会儿...这个是支持拖拽的上传. 下面代码是一个简单的ajax的文件上传: function match(url,rs ...
随机推荐
- 微软企业库的Cache
微软企业库的Cache 通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能.基于微软的企业库,我们的快速创建一个缓存的实现. 新建PrismSamp ...
- BZOJ 2436 NOI嘉年华(单调优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
代码里面监控1个进程, 代码很简单, 我就不讲解了, 有不懂的, 可以在回复里面问. 我看见了会给予讲解. 当然了, 该脚本要执行,你需要开启系统的定时器进程 crond , 并且编辑配置文件. 执行 ...
- C# 文件夹操作
追加文件 StreamWriter sw = File.AppendText(Server.MapPath(] != Path.DirectorySeparatorChar) a ...
- 如何实现异步调用WCF
在面向服务的.NET开发中,我们经常要调用WCF服务加载数据,这时候,如果使用同步调用,会阻止UI,影响用户体验UE/UX,而且当服务器ping不通或者网速特别烂的情况下,这时候基本上是处于卡死状态, ...
- DB2 中日期 比较
在DB2中的Date 一共识别三种格式,最常见的是这样 '2013-12-12' 对,你没看错,DB2认为这样的字符串就是Date数据 然后我们可以利用函数这样寻找日期区间 select * from ...
- Find Successor & Predecessor in BST
First, we use recursive way. Successor public class Solution { public TreeNode inorderSuccessor(Tree ...
- 常用的Eclipse快捷键
alt+shift+r 修改名字 ctrl+shift+r 查找源类 Eclipse快捷键功能1. [ALT+/] --->提示此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不 ...
- Linux网络编程--多播
一.多播介绍 什么是多播? 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信.单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信.实际情 ...
- JSP 中 JSTL 页面标签的笔记
jsp头部引入使用的标签 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&g ...