h5 input file ajax实现文件上传
<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_0" multiple> 文件域
遇到的几个BUG 已经解决
1 多选文件域,如果没有上传成功或已上传成功,再次点击文件域名选择图片时,会累积上次的文件。
例如 第一次上传1.jpg 第二次点击上传 2.jpg 第二次的上传结果为1.jpg 2.jpg 上传了两张。
解决此问题思路:
1 在网上查了很多关于清除file文件域的办法,都不起作用/
2 最终用了删除直接的file文件域 重新创建一个file文件域 重新绑定事件,重复上传文件解决。
/**
* 初始化图片上传文件
*/
function init_list_imgs(){
if(!(window.FileReader && window.File && window.FileList && window.Blob)){
$.alert('您的浏览器不支持fileReader');
return false;
}
add_imgs();
} /**
* 动态添加的图片上传
*/
function add_imgs(){
imgs_div_html = '\
<li id="img_nav">\
<div class="item-content">\
<div class="item-media">\
<i class="icon icon-form-name"></i>\
</div>\
<div class="item-inner">\
<div class="item-title label">外观</div>\
<div class="item-input">\
<span class="icon icon-down" id="direct_ico" style="float: right"></span>\
<div style="clear: both;"></div>\
</div>\
</div>\
</div>\
</li>\
<li class="li_imgs" style="display:none">\
<div class="imgs">\
<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_0" multiple>\
<span></span>\
</div>\
</li>';
$('#wash_car_mem').after(imgs_div_html);
//点击 外观 事件
img_nav();
//绑定 事件
bind_event();
} /**
* 首次
*/
function bind_event(){
var file_input = $('.li_imgs').children('.imgs').last().children().first();
file_input_change(file_input);
} /**
* 区分 Ios android 绑定 文件上传事件
*/
function file_input_change(file_input){ file_input.next('span').on('click',function(){
$('#file_input_ss_'+file_input_id).click().trigger();
}); file_input.on('click',function(){
$(this).attr('disabled');
var u = navigator.userAgent;
if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
// 调安卓接口,调拍照和相册的弹窗
window.androidJsInterface.obtainFile();
} else {
ios_bind_change(file_input);
}
});
}
/**
* IOS 文件上传事件绑定
*/
function ios_bind_change(file_input){
file_input.on('change',function(){
//单通道
if(_deny_request){
remove_file_input($(this))
return;
}
_deny_request = true;
//载入动画
$.showPreloader(_up_img_msg);
if(!this.files.length){
$('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
$.hidePreloader();
_deny_request = false;
return; }else if(this.files.length > 6){
$.hidePreloader();
$.alert('一次最多只能选择6张图片哦',function(){_deny_request = false;$('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');remove_file_input($(this));});
return;
}else{
var s = check_file(this.files);
remove_file_input($(this));
}
});
} /**
* 删除文件上传域 解决部分机型重复上传问题
*/
function remove_file_input(file_input){
file_input.remove();
++file_input_id;
$('.li_imgs').children('.imgs').last().children('span').before('<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_'+file_input_id+'" multiple>');
file_input_change($('#file_input_ss_'+file_input_id));
} /**
* IOS 图片上传
*/
function check_file(files){
//校验收集表单数据
var formdata = new FormData();
var bad_files = 0;
for(var i=0; i<files.length;i++){
if(/image\/\w+/.test(files[i].type)){
formdata.append("imgFile"+i, files[i]);
}else{
bad_files++;
}
}
if(bad_files >= files.length){
$.hidePreloader();
$('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
_deny_request = false;
return;
}
//提交
$.ajax({
type: "POST",
dataType: "json",
contentType: false,
cache : false,
processData : false,
async: true,
url: '?c=bzymgr/washcar&a=add_imgs&openid=<?php echo $this->openid;?>',
data:formdata,
success: function (res) {
if(res=='0'){
public_toast('照片上传失败,请稍后重试',1000);
return;
}
var html = '';
for(var i in res){
html += '<div class="imgs">\
<img src="'+res[i]+'" class="thumb_img"/>\
<b class="img_cancel" onclick="remove_img(this)">X</b>\
</div>';
//存储到localStorage
add_imgs_LocalStorage(res[i]);
}
//插入dom
$('.li_imgs').children('.imgs').last().before(html);
setTimeout(function(){
$.hidePreloader();
$('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
_deny_request = false;
},1000);
return;
},
error:function(){
public_toast('服务器离家出走了,请稍后重试',2000);
return;
},
});
} /**
* 删除 已上传图片
* 只删除本地 服务器不删除
*/
function remove_img(obj){
$.confirm('确认要删除这张图片吗?',function(){
pop_imgs_LocalStorage($(obj).prev('img').attr('src'));
$(obj).parent().remove();
return;
});
}
以上代码在IOS 9.3.1 中用 Input file 可以调用出 相册和相机
但是在IOS 8.4版本中,就直接访问相册了。 目前还没有好找到好的解决办法。
h5 input file ajax实现文件上传的更多相关文章
- input file美化,文件上传
此文学习至:http://www.haorooms.com/post/input_file_leixing 然而只会用,不会做,UI泪茫茫 效果图: 原图: 美化后: 此主要用css美化表单,然后用J ...
- vue项目内嵌入到app input type=file 坑(文件上传插件)
w问题描述: 我用vue-cli完成的一个移动端项目,内嵌到app当中,用原生的input type=file 来完成文件上传.在安卓下没有问题但是在苹果手机 上传第二次手机就会发生白屏 并无缘无故跳 ...
- ajax提交表单、ajax实现文件上传
ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...
- Ajax 与文件上传
一 Ajax篇 1 ajax简介(Asynchronous Javascript And XML) 异步,Js,XML,即使用Javascript语言与服务器进行异步交互,传输的数据为xml(可扩展标 ...
- 基于 Django的Ajax实现 文件上传
---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...
- ajax与文件上传
一.ajax ajax(Asynchronous JavaScript And XML):异步JavaScript和XML,即使用JavaScript语句与服务器进行异步交互,传输的数据为XML(也可 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- python django + js 使用ajax进行文件上传并获取上传进度案例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Django学习笔记之Ajax与文件上传
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...
随机推荐
- Resolving failed: Temporary failure in name resolution 错误解决方法
首先,检查自己的服务器是否配置了DNS: 其次,在确认了自己已经配置了DNS后,并且域名解析已经正常的情况下,还有上面的问题,接下来就是重启自己的web服务器.比如,apache,nginx等. ...
- YTU 2335: 0-1背包问题
2335: 0-1背包问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 15 解决: 12 题目描述 试设计一个用回溯法搜索子集空间树的函数.该函数的参数包括结点可行性判定函数和上界 ...
- poj1811 Prime Test
http://poj.org/problem?id=1811 #include <cstdio> #include <cstring> #include <algorit ...
- C#获得枚举类型的长度
enum MyEnum { Value1, Value2, } class Program { static void Main(string[] args) { var e = new MyEnum ...
- python 使用 redis expire属性设置访问时间间隔
安装redis yum install redis 安装python redis扩展 pip install redis 启动redis,并设定开机自动启动 service redis start c ...
- 浅谈CSS样式png、gif、jpg图片优化的方法
一.PNG.GIF.JPG图片对比 在我们进行图像优化技术前,需要学习有关的图片格式的一些技术细节,每个图形格式都有自己的优势和拖弱点,知道他们会使你得到更好的视觉质量和压缩品质. 网页图片优化是网页 ...
- 2016CCPC东北地区大学生程序设计竞赛 1001 HDU5922
链接http://acm.hdu.edu.cn/showproblem.php?pid=5922 题意:最小生成树,但边的权值是连接两点的最小公倍数 解法:不要真的写最小生成树啦,只要其他点和第一点相 ...
- cetos6.5安装Tomcat
一. 下载Tomcat 官网下载Tomcat tar.gz文件 二. 解压tar.gz文件 tar -zxvf tomcat.tar.gz 三. 在catalina.sh最上面添加一下内容 expo ...
- C语言中的二维数组和数组指针的那些事
其实很多人就想弄明白这个定义了的数组指针里面赋值给的a究竟是什么 a是一个列地址,那么*a是什么,*a还是个地址它存储了行地址.如果我们定义一个指针,那他就有点二级指针的味道.因为它存储的是一个地址, ...
- C# 正则表达式 转自-每日一bo
最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料.为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例.让以后在使用时 ...