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 相关文章推荐
php生成局部唯一识别码LUID的代码
Oct 06 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
Django中反向生成models.py的实例讲解
2018/05/30 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python实现EM算法实例代码
2020/10/04 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2014年财政工作总结
2014/12/10 职场文书
优秀团队申报材料
2014/12/26 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
解析MySQL binlog
2021/06/11 MySQL