第一次用,记录一下

HTML中的样式

HTML代码

  

 1             <li class="orther" style="padding-top: 15px;">
<p>商品封面</p>
<div class="img-area">
<div class="img-cont">
<input type="file" id='id-pic' name='pic' accept="image/*" />
<div id='pic-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic-result'/>
</div>
</div>
</li>
<li class="orther" style="padding-bottom: 15px;">
<p>商品轮播</p>
<div class="img-area">
<div class="img-cont">
<input type="file" id='id-pic1' name='pic1' accept="image/*" />
<div id='pic1-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic1-result'/>
</div>
<div class="img-cont">
<input type="file" id='id-pic2' name='pic2' accept="image/*" />
<div id='pic2-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic2-result'/>
</div>
<div class="img-cont">
<input type="file" id='id-pic3' name='pic3' accept="image/*" />
<div id='pic3-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic3-result'/>
</div>
<div class="img-cont">
<input type="file" id='id-pic4' name='pic4' accept="image/*" />
<div id='pic4-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic4-result'/>
</div>
<div class="img-cont">
<input type="file" id='id-pic5' name='pic5' accept="image/*" />
<div id='pic5-empty-result'>
<img src="__PUBLIC__/home/images/file_bg.png" />
</div>
<img style='width: 100%' id='pic5-result'/>
</div>
</div>
</li>

对应的Js 处理代码

<script>
window.onload=function(){
document.getElementById("id-pic").addEventListener("change", function(){
onFileChange(this,"pic-result","pic-empty-result")
});
document.getElementById("id-pic1").addEventListener("change", function(){
onFileChange(this,"pic1-result","pic1-empty-result")
});
document.getElementById("id-pic2").addEventListener("change", function(){
onFileChange(this,"pic2-result","pic2-empty-result")
});
document.getElementById("id-pic3").addEventListener("change", function(){
onFileChange(this,"pic3-result","pic3-empty-result")
});
document.getElementById("id-pic4").addEventListener("change", function(){
onFileChange(this,"pic4-result","pic4-empty-result")
});
document.getElementById("id-pic5").addEventListener("change", function(){
onFileChange(this,"pic5-result","pic5-empty-result")
});
// document.getElementsByClassName("pub-btn")[0].addEventListener("click", function(){
// submit();
// });
};
/**
* 选中图片时的处理
* @param {*} fileObj input file元素
* @param {*} el //选中后用于显示图片的元素ID
* @param {*} btnel //未选中图片时显示的按钮区域ID
*/
function onFileChange(fileObj,el,btnel){
var windowURL = window.URL || window.webkitURL;
var dataURL;
var imgObj = document.getElementById(el);
document.getElementById(btnel).style.display="none";
imgObj.style.display="block";
if (fileObj && fileObj.files && fileObj.files[0]) {
dataURL = windowURL.createObjectURL(fileObj.files[0]);
imgObj.src=dataURL;
} else {
dataURL = fileObj.value;
imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL;
}
}
/**
* 将图片压缩后返回base64格式的数据
* @param {*} image img元素
* @param {*} width 压缩后图片宽度
* @param {*} height 压缩后图片高度
* @param {*} qua //图片质量1-100
*/
function compressImageTobase64(image,width,height,qua){
var quality = qua ? qua / 100 : 0.8;
var canvas = document.createElement("canvas"),
ctx = canvas.getContext('2d'); var w = image.naturalWidth,
h = image.naturalHeight;
if(w<=1 || h<=1){
return false;
}
canvas.width = width||w;
canvas.height = height||h;
ctx.drawImage(image, 0, 0, w, h, 0, 0, width||w, height||h);
var data = canvas.toDataURL("image/jpeg", quality);
return data;
}
//提交
function submit(){
//1、form提交
//document.getElementById("pubForm").submit();
//2、压缩后ajax提交
var pic_data=compressImageTobase64(document.getElementById("pic-result"),200,100,90);
var pic1_data=compressImageTobase64(document.getElementById("pic1-result"),200,100,90);
var pic2_data=compressImageTobase64(document.getElementById("pic2-result"),200,100,90);
var pic3_data=compressImageTobase64(document.getElementById("pic3-result"),200,100,90);
var pic4_data=compressImageTobase64(document.getElementById("pic4-result"),200,100,90);
var pic5_data=compressImageTobase64(document.getElementById("pic5-result"),200,100,90);
var formData = new FormData();
if(pic_data==false){
layer.alert("请上传产品封面!");
return false;
}else{
formData.append("pic",pic_data);
}
if(pic1_data==false && pic2_data==false && pic3_data==false && pic4_data==false && pic5_data==false){
layer.alert("请至少选择一张轮播图!");
return false;
}else{
if(pic1_data!=false) formData.append("pic1",pic1_data);
if(pic2_data!=false) formData.append("pic2",pic2_data);
if(pic3_data!=false) formData.append("pic3",pic3_data);
if(pic4_data!=false) formData.append("pic4",pic4_data);
if(pic5_data!=false) formData.append("pic5",pic5_data);
}
// 需引入jQuery
$.ajax({
url:"{<:U('Home/Product/upload')>}",
type: 'POST',
cache: false,
data: formData,
timeout:180000,
processData: false,
contentType: false,
success:function(r){
return r;
},
error:function(r){
}
});
}
</script>

PHP端的处理

 public function upload(){
$pics =array_values(I('post.'));
$dir = "./Uploads/Product/";
//判断目录是否存在 不存在就创建
if(!file_exists($dir)){
mkdir($dir,0777);
}
$thumb = "";
$lunbo = [];
$error = [];
foreach($pics as $key=>$vo){
if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $vo, $result)){
$type = $result[2];
if(in_array($type,array('jpeg','jpg','gif','bmp','png'))){
$file_name= uniqid().'.'.$type;
$new_file = $dir.$file_name;
$xx = base64_decode(str_replace($result[1], '', $vo));
if(file_put_contents($new_file,$xx)){
if($key==0){
$thumb = $file_name;
}else{
$lunbo[]=$file_name;
}
}else{
$error[] = "$key 图片上传失败";
}
}else{
//文件类型错误
$error[] = "$key 图片上传类型错误";
}
}
}
if($thumb!=""&&count($lunbo)>=1){
session("thumb",$thumb);
session("lunbo",$lunbo);
echo true;
}else{
echo false;
}
}

总结:

  主要还是JS页面的处理,将图片转换成base64字符串。通过ajax将字符串传递到后端

  后端则使用正则形式,将格式化字符串所表达的内容取出,

  再针对图片字符串进行file_put_contents();

关于以base64编码形式上传图片的更多相关文章

  1. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  2. c# API接受图片文件以Base64格式上传图片

    /// base64上传图片 /// </summary> /// <returns>成功上传返回上传后的文件名</returns> [HttpPost] publ ...

  3. .NET MVC 后台接受base64的上传图片

    #region 配合前端的多张图片上传 #region 上传图片方法 /// <summary> /// 接口方法 /// </summary> /// <param n ...

  4. 010-java 表单方式或者base64方式上传图片,后端使用nutz的post转发图片到另一个请求

    本地上传图片 方式一.使用表单方式上传-enctype <form enctype="multipart/form-data" method="post" ...

  5. base64编码上传图片java后台接收实例

    原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...

  6. iview upload 上传图片 不传服务器 转 base64

    开始的时候 找不到this了,后来想起来要用 ES6的箭头函数 就有this了 reader.onload = e => { // 读取到的图片base64 数据编码 将此编码字符串传给后台即可 ...

  7. 关于Base64编码的理解

    版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/52132250 之前在很多业务中都 ...

  8. 各种计算机编码与base64

    什么是base64,base64与Hex编码,ASCII编码,UTF-8编码都是什么关系 1 计算机开始之初,二进制 计算机所用的语言是什么呢?这个语言非常简单,只有0和1两种表示.0代表否,1代表是 ...

  9. 本地图片转base64编码

    通常获取图片的base64编码都是通过input的上传file属性获取转化,但是有时候需要的是本地图片不经过上传操作,直接拿本地图片转成base64编码就不行了,input上传操作需要人为操作一下,没 ...

随机推荐

  1. 前端框架bootstrap(响应式布局)入门

    Bootstrap,是基于HTML,CSS.javascript的前端框架 该框架已经预定义了一套CSS样式和与样式相对应的js代码(对应的样式有对应的特效.) 开发人员只需要编写HTML结构,添加b ...

  2. linux 启动流程

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  3. UML类图新手入门级介绍(转)

    首先,看动物矩形框,它代表一个类(Class).类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示.第二层是类的特性,通常就是字段和属性.第三层是类的操作,通常是方法或行为.前面的符号,+ ...

  4. 【题解】Luogu P2081 [NOI2012]迷失游乐园

    原题传送门 这是当时冬令营课上讲的题,咕咕咕到了现在 如果这题没有环套树的话,就很套路了 需要两个数组up[i]和down[i],down[i]表示从i点第一步向下走的期望距离,up[i]表示从i点第 ...

  5. 代理模式——用AOP测试业务层方法的执行时间

    代理模式 对代理模式的理解,通过http://www.runoob.com/design-pattern/proxy-pattern.html 对AOP的代理模式,参考https://www.cnbl ...

  6. HBase根据Rowkey批量查询数据JAVA API(一次查多条,返回多个记录)

    最近在生产中遇到了一个需求,前台给我多个rowkey的List,要在hbase中查询多个记录(返回给前台list).在网上也查了很多,不过自己都不太满意,filter的功能有可能查询结果不是准确值,而 ...

  7. CSDN去广告插件

    因为避免不了与代码打交道,所以经常要上网搜代码,一般搜索到的资源都指向了CSDN,然而,好好的一篇博文,上面有很多广告,看着很不舒服,冲vip是不可能的,穷的的要死,怎么办呢?写个插件把! 去广告原理 ...

  8. 20175312 2018-2019-2 《Java程序设计》第8周学习总结

    20175312 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第十章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...

  9. 论文笔记:Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering

    Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering 2019-04-25 21: ...

  10. GIT导出差异版本更新的文件列表

    之前写了一篇SVN导出差异版本更新的文件列表 这次写git如何导出差异化版本文件列表 查找了一番,发现git diff这个命令 $ git diff 2da595c daea1d6 --name-on ...