js上传图片预览,php后台接收实例,已改写为多图上传预览
2017-04-11 17:51
615 查看
上传图片预览这个出自超实用的js代码段,关于图片的处理那一章,php后台接收是网上比较少这方面的资源或者写得很复杂,这里简单记录。都是基于js
首先先调用两个文件夹animateManage.js和viewimg.js,可以在网上下载。相当好用。
关键点是FileReader这个知识点,可以读取文件的相关信息,包括路径。这是个关键点。
注意,这是单张图片的预览。
接下来是后台
我用的是ajax来传给后台,其实ajax网上太多资料关于传文件了,其实没那么复杂,很简洁。
关键点在FormData这个对象。#add_goods_info这个是from的id
php后台按正常接收即可,抄w3c的例子也可以。
因为在js那里,书籍的高手已经做了详细的信息过滤,这里可根据自由做扩展验证。
最新个人修改,支持多图预览,关键单在于这次获取的是getElementsByName,然后通过数组来处理FileReader,同样有每行代码解析 upPreviewImgLong = function(options){//带参数进来
//console.log(options);//两个对象
//alert(options.previewImgSrc[1]);//一开始加载的是object HTMLImageElement;
//alert(options.e[0]);
var _e = options.e[0],//通过按钮来触发事件,可以通过for循环来处理,但是一直存在问题,为了事务流,暂时写实数量
_s = options.e[1],
_k = options.e[2],
preloadImg = null;
for (var i =0;i<options.e.length; i++) {
_e.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
//取消不不支持FileReader的平稳退化,优化可读性
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象,这个是files对象,不是指定图片的数组下标
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[0].setAttribute("src", this.result);//options.previewImgSrc[]的下标才是上传图片name的数组下标
options.previewImgSrc[0].style.display = "block";
options.previewImgSrc[0].style.width = "200px";
options.previewImgSrc[0].style.height = "200px";
};
})(_file);
reader.onerror = function(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
_s.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[1].setAttribute("src", this.result);
options.previewImgSrc[1].style.display = "block";
options.previewImgSrc[1].style.width = "200px";
options.previewImgSrc[1].style.height = "200px";
};
})(_file);
reader.onerror = functi
ba58
on(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
_k.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[2].setAttribute("src", this.result);
options.previewImgSrc[2].style.display = "block";
options.previewImgSrc[2].style.width = "200px";
options.previewImgSrc[2].style.height = "200px";
};
})(_file);
reader.onerror = function(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
}
};
function addImg(buttonName,imgName){
upPreviewImgLong({//图片预览上传,调用函数
"e":document.getElementsByName(buttonName),//这个是按钮name名
"previewImgSrc":document.getElementsByName(imgName)//这个是图片name名
})
};
html文件
var add_longimgs=document.getElementById("add_longimgs");
add_longimgs.onclick=function(){
var goods_longimgs_num=document.getElementsByName("goods_longimgs[]");
if (goods_longimgs_num.length <= 2) {
addLong();
imgName="longs[]";
buttonName="goods_longimgs[]";
addImg(buttonName,imgName);
}else{
alert("为了上传速度的保证,请一次最多上传三张");
};
};
var add_imgs=document.getElementById("add_imgs");
add_imgs.onclick=function(){
var goods_longimgs_num=document.getElementsByName("goods_imgs[]");
if (goods_longimgs_num.length <= 2) {
addImgs();
imgName="imgs[]";
buttonName="goods_imgs[]";
addImg(buttonName,imgName);
}else{
alert("为了上传速度的保证,请一次最多上传三张");
};
};
首先先调用两个文件夹animateManage.js和viewimg.js,可以在网上下载。相当好用。
关键点是FileReader这个知识点,可以读取文件的相关信息,包括路径。这是个关键点。
/* * 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件, * 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容 * */ var reader = new FileReader(), _file = this.files[0]; //读取被加载的文件对象 reader.onload = (function(file) { //监听load事件 return function() { options.previewImgSrc.setAttribute("src", this.result); options.previewImgSrc.style.display = "block"; }; })(_file); reader.onerror = function(){//监听文件读取的错误处理 alert("文件读取数据出错"); } reader.readAsDataURL(_file);//读取文件内容···
注意,这是单张图片的预览。
接下来是后台
我用的是ajax来传给后台,其实ajax网上太多资料关于传文件了,其实没那么复杂,很简洁。
关键点在FormData这个对象。#add_goods_info这个是from的id
$("#add_btn").click(function() { var formData = new FormData($("#add_goods_info")[0]); $.ajax({ type: "post", //data:$("#add_goods_info").serialize(), data: formData, contentType: false, processData: false, url:"<?php echo site_url("gallery/update");?>", dataType:"json", success:function(data){ alert(data); } }) });
php后台按正常接收即可,抄w3c的例子也可以。
if (file_exists('./uploads/source/head/'.date('Y/m/d'))) { $address = 'uploads/source/head/'.date('Y/m/d'); if (!file_exists($address. $_FILES["head_img"]["name"])) { move_uploaded_file($_FILES["head_img"]["tmp_name"],"$address"."/".$_FILES["head_img"]["name"]); $where=array( 'original_img'=>"$address"."/".$_FILES["head_img"]["name"] ); $this->gallery_model->update($goods_id,$where); } } else { mkdir('./uploads/source/head/'.date('Y/m/d'), 0777,true); $address = 'uploads/source/head/'.date('Y/m/d'); if (!file_exists($address. $_FILES["head_img"]["name"])) { move_uploaded_file($_FILES["head_img"]["tmp_name"],"$address"."/".$_FILES["head_img"]["name"]); $where=array( 'original_img'=>"$address"."/".$_FILES["head_img"]["name"] ); $this->gallery_model->update($goods_id,$where); } }
因为在js那里,书籍的高手已经做了详细的信息过滤,这里可根据自由做扩展验证。
最新个人修改,支持多图预览,关键单在于这次获取的是getElementsByName,然后通过数组来处理FileReader,同样有每行代码解析 upPreviewImgLong = function(options){//带参数进来
//console.log(options);//两个对象
//alert(options.previewImgSrc[1]);//一开始加载的是object HTMLImageElement;
//alert(options.e[0]);
var _e = options.e[0],//通过按钮来触发事件,可以通过for循环来处理,但是一直存在问题,为了事务流,暂时写实数量
_s = options.e[1],
_k = options.e[2],
preloadImg = null;
for (var i =0;i<options.e.length; i++) {
_e.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
//取消不不支持FileReader的平稳退化,优化可读性
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象,这个是files对象,不是指定图片的数组下标
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[0].setAttribute("src", this.result);//options.previewImgSrc[]的下标才是上传图片name的数组下标
options.previewImgSrc[0].style.display = "block";
options.previewImgSrc[0].style.width = "200px";
options.previewImgSrc[0].style.height = "200px";
};
})(_file);
reader.onerror = function(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
_s.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[1].setAttribute("src", this.result);
options.previewImgSrc[1].style.display = "block";
options.previewImgSrc[1].style.width = "200px";
options.previewImgSrc[1].style.height = "200px";
};
})(_file);
reader.onerror = functi
ba58
on(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
_k.onchange = function(){//按钮点击事件
var _v = this.value,
_body = document.body;
picReg = /(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png){1}/;//图片正则
if(!picReg.test(_v)){//简单的图片格式验证,这个可以实装
alert("请选择正确的图片格式");
return false;
}
//支持FileReader,现在浏览器都行了吧,要做这种效果,主要起效都在FileReader的对象中做手脚
/*
* 调用FileReader 文件API的readAsDataURL,启动异步加载文件的数据,通过监听reade的onload事件,
* 等待数据加载完毕后,在回调函数onload事件中,通过reader的result属性即可获得图片文件的相关内容
* */
var reader = new FileReader(),
_file = this.files[0]; //读取被加载的文件对象
reader.onload = (function(file) { //监听load事件
return function() {
//alert(this.result);
options.previewImgSrc[2].setAttribute("src", this.result);
options.previewImgSrc[2].style.display = "block";
options.previewImgSrc[2].style.width = "200px";
options.previewImgSrc[2].style.height = "200px";
};
})(_file);
reader.onerror = function(){//监听文件读取的错误处理
alert("文件读取数据出错");
}
reader.readAsDataURL(_file);//读取文件内容···
}
}
};
function addImg(buttonName,imgName){
upPreviewImgLong({//图片预览上传,调用函数
"e":document.getElementsByName(buttonName),//这个是按钮name名
"previewImgSrc":document.getElementsByName(imgName)//这个是图片name名
})
};
html文件
var add_longimgs=document.getElementById("add_longimgs");
add_longimgs.onclick=function(){
var goods_longimgs_num=document.getElementsByName("goods_longimgs[]");
if (goods_longimgs_num.length <= 2) {
addLong();
imgName="longs[]";
buttonName="goods_longimgs[]";
addImg(buttonName,imgName);
}else{
alert("为了上传速度的保证,请一次最多上传三张");
};
};
var add_imgs=document.getElementById("add_imgs");
add_imgs.onclick=function(){
var goods_longimgs_num=document.getElementsByName("goods_imgs[]");
if (goods_longimgs_num.length <= 2) {
addImgs();
imgName="imgs[]";
buttonName="goods_imgs[]";
addImg(buttonName,imgName);
}else{
alert("为了上传速度的保证,请一次最多上传三张");
};
};
相关文章推荐
- PHP仿微信多图片预览上传实例代码
- PHP jQuery实现上传图片时预览图片的功能实例
- 微信小程序图片选择、上传到服务器、预览(PHP)实现实例
- post图片上传php后台接收到的是空(压缩图片)
- js实现图片文件上传预览 | 黄乔国PHP
- PHP上传图片检查类与实例用法--接收图片并安全检查后保存到本地
- 小程序的图片上传wx.uploadFile及后台PHP接收文件并存储到服务器
- JS上传前预览图片实例
- js图片上传,ssh后台接收 struts2+jQuery
- php+js实现图片的上传、裁剪、预览、提交示例
- JS上传前预览图片实例
- base64编码上传图片java后台接收实例
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例
- js HTML5多图片上传及预览实例解析(不含前端的文件分割)
- Vue.js 2.0 移动端拍照压缩图片预览及上传实例
- base64编码上传图片java后台接收实例
- [js实例] input type=file 上传图片预览 createObjectURL
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例
- 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例
- php+js实现图片的上传、裁剪、预览、提交示例