第一次用,记录一下

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. deepin 安装scrapy安装出错:fatal error: Python.h 的解决办法

    环境deepin Linux 15.7 Python3.6.5 今天重新装了deepin系统,需要重新安装scrapy,直接pip了一下,没成. 报错:fatal error: Python.h: 没 ...

  2. WIN10下微信崩溃(已经是最新版)的解决方法

    微信运行错误---------------------------你的微信崩溃次数较多,建议使用最新版本,点击"确定"到官网(http://pc.weixin.qq.com/)下载 ...

  3. C#线程同步(2)- 临界区&Monitor

    文章原始出处 http://xxinside.blogbus.com/logs/46740731.html 预备知识:C#线程同步(1)- 临界区&Lock 监视器(Monitor)的概念 可 ...

  4. 使用NVM管理Node - Windows

    安装 NVM NVM 下载:https://github.com/coreybutler/nvm-windows 安装 Node 注意:如果没有FQ默认源可能安装npm失败,请参考下一节“安装 NPM ...

  5. vi编辑器使用记录

    01. vi 简介 1.1 学习 vi 的目的 在工作中,要对 服务器 上的文件进行 简单 的修改,可以使用 ssh 远程登录到服务器上,并且使用 vi 进行快速的编辑即可 常见需要修改的文件包括: ...

  6. libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

    In Xcode 9 and Swift 4: Print exception stack to know the reason of the exception: Go to show break ...

  7. HBase Block Cache(块缓存)

    Block Cache HBase提供了两种不同的BlockCache实现,用于缓存从HDFS读出的数据.这两种分别为: 默认的,存在于堆内存的(on-heap)LruBlockCache 存在堆外内 ...

  8. RecyclerView嵌套ScrollView导致RecyclerView内容显示不全

    我们在使用RecyclerView嵌套至ScrollView内的时候 RecyclerView不在屏幕内的数据会不显示出来,这里是一个坑,我们需要重写RecyclerView /** * Create ...

  9. Python实现:汉诺塔问题

    汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何 ...

  10. 【MIT-6.824】Lab 1: MapReduce

    Lab 1链接:https://pdos.csail.mit.edu/6.824/labs/lab-1.html Part I: Map/Reduce input and output Part I需 ...