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 ...
随机推荐
- 拉姆达表达式 追加 条件判断 Expression<Func<T, bool>>
public static class PredicateBuilder { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效,多个 ...
- Objective-C中release和nil的关系
(iphone/ipad)浅谈Objective-C中release和nil的关系 分类: iPhone/iPad开发技术2011-12-09 01:40 2515人阅读 评论(4) 收藏 举报 ui ...
- 实现在线阅读pdf功能--php
在网上找了很久,想要实现一个在线阅读word,pdf文件的功能,网上的资料很多,但是提到真正怎么实现的比较少.现在我来简单说明一下,我实现的过程. 我现在只能实现在线阅读pdf(将word等转换成pd ...
- Linux 下通过脚本实现远程自动备份
考虑到在本机上备份数据,一旦该机器硬盘出现故障,数据无法取出.远程手动备份数据费时费力且不及时.最好的方法就是通过脚本实现远程自动互备.但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码 ...
- Smarty 变量使用
Smarty的标签都是使用定界符括起来. 默认定界符是{ 和 }, 但定界符可以被改变. 比如说在本手册,我们会假定你在使用默认的定界符. 在Smarty看来,任何在定界符之外的内容,都是静态的,或者 ...
- explorer.exe进程简单介绍
explorer.exe是Windows程序管理器或者Windows资源管理器,它用于管理Windows图形壳,包括开始菜单.任务栏.桌面和文件管理.不过也发现有大量的恶意病毒木马插入到explore ...
- java日期时间处理小结
这两周时间的Java开发让我感觉到JAVA语言确实把一些简单的事情搞得很复杂,比如日期时间处理,或许是考虑不同时区国际化跨平台之类的因素,但JAVA语言处理确实让我很困惑,相信身边好多开发的同事也如此 ...
- GridView视图
本文实现如下效果 Test_Grid.java public class Test_Grid extends Activity { private GridView gridview; private ...
- [转]Laravel 4之Eloquent ORM
Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...
- 使用批处理bat作为日期系统日期的前三天
在管理server它经常是依据一天来推断载日期系统日志文件,例如,上周五,周一的需要上传日志.上传日志的日期前一天,日志文件命名的日期.这需要获得的日期的前三天.或之前n当天日期. 批量绑定vbs可以 ...