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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
PHP教程 预定义变量
Oct 23 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
js中this对象用法分析
2018/01/05 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
js实现图片实时时钟
2020/01/15 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python paramiko模块的使用示例
2018/04/11 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
python查看数据类型的方法
2019/10/12 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
使用python实现学生信息管理系统
2021/02/25 Python
幼儿园优秀教师事迹
2014/02/13 职场文书
中学生自我评价2015
2015/03/03 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
歌咏比赛主持词
2015/06/29 职场文书
教师节领导致辞
2015/07/29 职场文书
毕业生入职感言
2015/07/31 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
z-index不起作用
2021/03/31 HTML / CSS
python中的plt.cm.Paired用法说明
2021/05/31 Python
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL