PHP常用函数之base64图片上传功能详解


Posted in PHP onOctober 21, 2019

本文实例讲述了PHP常用函数之base64图片上传功能。分享给大家供大家参考,具体如下:

HTML页面代码:

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<img id="articleImg" width="180" height="100">
<input type="file" value="上传" id="articleImgBtn" />
<script type="text/javascript" src = 'jquery-2.1.4.min.js'></script>
<script type="text/javascript">
$('#articleImgBtn').change(function(){
run(this, function (data) {
uploadImage(data);
});
});
function run(input_file, get_data) {
/*input_file:文件按钮对象*/
/*get_data: 转换成功后执行的方法*/
if (typeof (FileReader) === 'undefined') {
alert("抱歉,你的浏览器不支持 FileReader,不能将图片转换为Base64,请使用现代浏览器操作!");
} else {
try {
/*图片转Base64 核心代码*/
var file = input_file.files[0];
//这里我们判断下类型如果不是图片就返回 去掉就可以上传任意文件
if (!/image\/\w+/.test(file.type)) {
alert("请确保文件为图像类型");
return false;
}
var reader = new FileReader();
reader.onload = function () {
get_data(this.result);
}
reader.readAsDataURL(file);
} catch (e) {
alert('图片转Base64出错啦!' + e.toString())
}
}
}
function uploadImage(img) {
//判断是否有选择上传文件
var imgPath = $("#articleImgBtn").val();
if (imgPath == "") {
alert("请选择上传图片!");
return;
}
//判断上传文件的后缀名
var strExtension = imgPath.substr(imgPath.lastIndexOf('.') + 1);
if (strExtension != 'jpg' && strExtension != 'gif'
&& strExtension != 'png' && strExtension != 'bmp') {
alert("请选择图片文件");
return;
}
$.ajax({
type: "POST",
url: 'http://localhost/123.php',
// data: {file: img.substr(img.indexOf(',') + 1)}, //视情况将base64的前面字符串data:image/png;base64,删除
data: {file: img}, //视情况将base64的前面字符串data:image/png;base64,删除
cache: false,
success: function(data) {
var return_info = JSON.parse(data);
if(return_info.status){
$("#articleImg").attr('src', return_info.path);
alert("上传成功");
}else{
alert(return_infoerr_info);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("上传失败,请检查网络后重试");
}
});
}
</script>
</body>
</html>

PHP 处理代码:

function upload_image($file_data){
$upload_result = array('status' => true, 'msg'=>'','err_info'=>'');
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file_data, $result)) {
//处理base64字符串
$img_base64 = str_replace($result[1], '', $file_data);
$img_base64 = str_replace('=', '', $img_base64);
$source_img = base64_decode($img_base64);
//判断文件大小
$file_size =
//上传目录
$basedir = './img_test';
//后缀
$img_suffix = $result[2];//文件后缀
//文件名
// $filename = uniqid();//文件名
$filename = date('YmdHis',time());//文件名
//文件完整路径
$filepath = $basedir . "/" . $filename . "." . $img_suffix;
//目录若果不存在,则创建目录
if(!is_dir($basedir)){
mkdir($basedir);
chmod($basedir,0777);
}
//上传文件
try {
file_put_contents($filepath, $img_base64);
$filepath = substr($filepath, 1);
$upload_result = array('status' => true, 'msg'=>'上传成功','err_info'=>'','path'=>$filepath);
return $upload_result;
} catch (Exception $e) {
$upload_result = array('status' => false, 'msg'=>'上传失败','err_info'=>$e->getMessage());
return $upload_result;
}
// if (file_put_contents($filepath, base64_decode(str_replace($result[1], '', $file_data)))) {
// //$size = getimagesize($filepath);
// $filepath = substr($filepath, 1);
// //$arr['filepath'] = $filepath;
// //$arr['size'] = $size[3];
// return $filepath;
// }else{
// return false;
// }
}else{
$upload_result = array('status' => false, 'msg'=>'上传失败','err_info'=>'请携带base64字符串的前缀');
return $upload_result;
}
}
$res = upload_image($file_data);
echo json_encode($res);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
php 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
PHP 类相关函数的使用详解
May 10 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
php集成开发环境详解
Sep 24 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
laravel5 Eloquent 实现事务方式
Oct 21 #PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 #PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 #PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 #PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 #PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 #PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 #PHP
You might like
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
代码生成器 document.write()
2007/04/15 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
Javascript的闭包详解
2014/12/26 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
几种tab切换详解
2017/02/03 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
商务英语专业自荐信
2013/10/14 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
幼儿学前班评语
2014/12/29 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
教师党员自我评价2015
2015/03/04 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript