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数据库初学者使用指南
Nov 16 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 PHP
PHP中SESSION过期设置
Mar 09 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
mac下安装nginx和php
2013/11/04 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
用js重建星际争霸
2006/12/22 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
python3爬虫怎样构建请求header
2018/12/23 Python
python dict 相同key 合并value的实例
2019/01/21 Python
Python threading的使用方法解析
2019/08/28 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
python实现登录与注册系统
2020/11/30 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
公司行政经理岗位职责
2013/12/24 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
文明社区申报材料
2014/08/21 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
学校重阳节活动总结
2015/03/24 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript