第一次用,记录一下

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. 【ubuntu】-桌面假死的解决办法

    第一,通过ctrl+art+F1(1-6),启动本地终端 切换到了字符界面tty1 第二,查询进程,ps -e |grep tty7 得到tty7的pid号 第三,杀死tty7的进程 , kill 9 ...

  2. BIOS备忘录之SPI(fingerprint)设备

    Reset和INT信号使用的是GPIO功能,需要显式的使用(INT信号使用了GPIO的int number,RST信号使用了GPIO的absolute number): 问题举例 漏电导致功能异常:在 ...

  3. jvm启动参数设置 -Dfile.encoding=UTF-8 解决freemark乱码

    今天一个spring boot应用windows跑起来后页面显示乱码,加上jvm启动参数为utf-8后,页面显示正常.

  4. bzoj 4767 两双手 - 动态规划 - 容斥原理

    题目传送门 传送门I 传送门II 题目大意 一个无限大的棋盘上有一只马,设马在某个时刻的位置为$(x, y)$, 每次移动可以将马移动到$(x + A_x, y + A_y)$或者$(x + B_x, ...

  5. 连接centos服务器gui

    https://blog.csdn.net/jack_nichao/article/details/78289398 配置好后下载vnc viewer 进行连接. Ubuntu:https://www ...

  6. ip xfrm命令是做什么的?

    答: 设置xfrm.xfrm(transform configuration)是一个IP框架,用来转换数据包的格式,也就是使用算法来加密数据包,该框架用作IPsec协议的一部分 ip xfrm sta ...

  7. 论文笔记:Learning regression and verification networks for long-term visual tracking

    Learning regression and verification networks for long-term visual tracking 2019-02-18 22:12:25 Pape ...

  8. 关于display的属性:block和inline-block以及inline的区别,float相关说明

    首先是block和inline的区别,说通俗点block就是让其形成块级元素,而且其前后都会有换行符:而inline的话就是让元素设置为内联样式(对其设置的宽高都没有什么卵用,不产生效果,但是颜色效果 ...

  9. Qt线程—QThread的使用--run和movetoThread的用法

    Qt使用线程主要有两种方法: 方法一:继承QThread,重写run()的方法 QThread是一个非常便利的跨平台的对平台原生线程的抽象.启动一个线程是很简单的.让我们看一个简短的代码:生成一个在线 ...

  10. tomcat中显示本地图片①(未解决)

    <本模块文仅作为学习过程中的自我总结,有需要可参看,欢迎指导与提出建议,很多地方可能断章取义,理解不到位,虚心求学.谢谢!> 资料查阅原因:2018/7/10(做项目中显示详情页面,从数据 ...