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 相关文章推荐
phpMyAdmin 安装教程全攻略
Mar 19 PHP
PHP 命名空间实例说明
Jan 27 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php中session退出登陆问题
Feb 27 PHP
PHP代码优化的53个细节
Mar 03 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
PHP中的异常处理机制深入讲解
Nov 10 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网站地图生成类示例
2014/01/13 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python的turtle库使用详解
2019/05/10 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
python 实现dict转json并保存文件
2019/12/05 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
Python多线程的退出控制实现
2020/08/10 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
高级Java程序员面试要点
2013/08/02 面试题
一个大学生十年的职业规划
2014/01/17 职场文书
简单租房协议书
2014/10/21 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android