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 静态页面中显示动态内容
Aug 14 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
php实现字符串翻转的方法
Mar 27 PHP
PHP可变变量学习小结
Nov 29 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 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调用新浪短链接API的方法
2014/11/08 PHP
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
CAD制图设计师自荐信
2014/01/29 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
活动总结的格式
2014/05/07 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
党员证明信
2015/06/19 职场文书
社区安全温馨提示语
2015/07/14 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
如何正确理解python装饰器
2021/06/15 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server