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+APACHE实现用户论证的方法
Oct 09 PHP
php zend 相对路径问题
Jan 12 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
PHP中如何定义和使用常量
Feb 28 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
详解PHP中的PDO类
Jul 06 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
php bootstrap实现简单登录
Mar 08 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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中的extract的作用分析
2008/04/09 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
学校节水倡议书
2015/04/29 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
《打电话》教学反思
2016/02/22 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
创业计划书之餐饮
2019/09/02 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
详解CSS故障艺术
2021/05/25 HTML / CSS
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL