-
PHP常用函数之base64图片上传功能详解
这篇文章主要介绍了PHP常用函数之base64图片上传功能,结合实例形式分析了前台ajax提交及后台base64图片编码上传相关操作技巧,需要的朋友可以参考下。
本文实例讲述了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);
出处:http://www.phpfensi.com/php/20220114/19495.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式