PHP上传图片类Upload.php
php文件Upload.php类:
<?php
/*** @Author: zm.wu* 上传类* 只需要实例化后调用uploadFile()方法*/
namespace app\common;class Uploads
{// 上传路径 ./ 意思是index.php下的当前目录protected $path = "./uploads/images/";// 允许上传文件最大值 5M 转换成字节protected $max_size = 5 * 1024 * 1024;// 允许上传文件后缀protected $ext = ['jpg', 'jpeg', 'gif', 'png', 'wbmp', 'bmp'];// 类型protected $mime = ['image/jpg', 'image/jpeg', 'image/gif', 'image/png', 'image/wbmp', 'image/bmpp'];// 文件新名字protected $new_file_name = '';// 存放上传文件的原信息,里面有字段:tmp_name,size,name,type,errorprotected $upload_file_array = [];/*** __construct 构造函数*/public function __construct(){if($this->path){// 自动加上日期如20211224/文件夹$this->path = $this->path.date('Ymd', time()).'/';}}/*** 上传文件* @return array()*/public function uploadFile(){// 没有设置上传路径if(!$this->path){return $this->outMessage('文件路径没有设置');}if(!$this->checkPath()){return $this->outMessage('文件路径不是目录或者不可写');}if(!$this->getUploadFile()){return $this->outMessage('获取上传文件源错误');}if(!$this->checkSize()){return $this->outMessage('文件超过指定大小');}if(!$this->checkExt()){return $this->outMessage('文件后缀不符合');}if(!$this->checkMime()){return $this->outMessage('文件类型不符合');}// 是否通过http post 上传的if(!is_uploaded_file($this->upload_file_array['tmp_name'])){return $this->outMessage('不是通过指定的HTTP POST 方式上传');}$this->new_file_name = $this->createNewFileName();// 开始上传$is_move_succ = move_uploaded_file($this->upload_file_array['tmp_name'], $this->path.$this->new_file_name);if(!$is_move_succ){return $this->outMessage('移动文件失败,上传失败');}// 上传成功拼接路径$pic_path = substr($this->path, 1).$this->new_file_name;// 获取拼接当前网站域名$domain = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'];$result = array('img' => $domain.$pic_path,'info' => $pic_path,'path' => $_SERVER['DOCUMENT_ROOT'].$pic_path,'title' => $this->upload_file_array['name'],);return $this->outMessage('上传成功', true, $result);}/*** 获取上传的文件源* @return [type] [description]*/public function getUploadFile(){if(empty($_FILES)) return false;foreach($_FILES as $tmp){$this->upload_file_array = $tmp;}return $this->upload_file_array['error']>0? false : true;}/*** 判断文件大小* @return [type] [description]*/public function checkSize(){// 判断文件大小return $this->upload_file_array['size'] > $this->max_size? false : true;}/*** 判断文件后缀是否符合* @return [type] [description]*/public function checkExt(){$old_ext = pathinfo($this->upload_file_array['name'])['extension'];return !in_array($old_ext, $this->ext)? false : true;}/*** 判断文件类型是否符合* @return [type] [description]*/public function checkMime(){return !in_array($this->upload_file_array['type'], $this->mime)? false : true;}/*** 返回信息* @param string $msg 提示* @param boolean $status 状态:false失败,true成功* @param [type] $data 数据* @return [type] [description]*/public function outMessage($msg='', $status=false, $data=null){return ['status' => $status,'msg' => $msg,'data' => $data];}/*** 检查文件夹是否存在和是否有权创建* @return [type] [description]*/public function checkPath(){// 文件或目录是否存在if( !file_exists($this->path) || !is_dir($this->path) ){return mkdir($this->path, 0777, true);}// 检查指定的文件是否可写if(!is_writeable($this->path)){// 不可写就更改文件权限return chmod($this->path, 0777);}return true;}/*** 创建文件新名字md5 + uniqid + mt_rand生成唯一* @return [type] [description]*/public function createNewFileName(){return md5(uniqid(mt_rand(), true)).'.'.pathinfo($this->upload_file_array['name'])['extension'];}}
html 文件index.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8">
</head>
<script src="__PUBLIC__/common/js/jquery.min.js"></script>
<script src="__PUBLIC__/common/js/ajax_file_upload.js"></script>
<style>.face_value{float:left;margin-left:200px;}.face_value table tr td {text-align:center;}
</style>
<body><div style="text-align:center;"><h3>人脸识别---人脸注册功能</h3><p>用于从人脸库中新增用户,可以设定多个用户所在组,及组内用户的人脸图片</p>
</div><div style="text-align:center;margin-top:50px;"><input id="img_id" type="file" name="file_upload" size="50" />
</div>
<div style="text-align:center;margin-top:50px;"><button id="upload" type="button">开始上传注册</button>
</div>
<div style="height:50px;"></div><div id="content" style="display:none;"><div style="float:left;"><img id="face_img" src="" style="width:500px;height:100%;" alt=""/></div><div class="face_value"></div>
</div>
</body>
</html><script>$(function(){$("#upload").click(function(){$.ajaxFileUpload({url : "{:url('index/saveUser')}", //用于文件上传的服务器端请求地址secureuri : false, //一般设置为falsefileElementId : 'img_id', //文件上传空间的id属性 <input type="file" id="file" name="file" />dataType : 'json', //返回值类型 一般设置为jsondata : {'file_path':'face'},async : false,contentType : "text/json;charset=utf-8",success : function(res){ //服务器成功响应处理函数if(res.code == 0){alert(res.msg);window.location.reload();}else{alert(res.msg);}}});});});</script>
异步上传文件的js文件ajax_file_upload.js:
jQuery.extend({createUploadIframe : function(id, uri) {// create framevar frameId = 'jUploadFrame' + id;var iframeHtml = '<iframe id="'+ frameId+ '" name="'+ frameId+ '" style="position:absolute; top:-9999px; left:-9999px"';if (window.ActiveXObject) {if (typeof uri == 'boolean') {iframeHtml += ' src="' + 'javascript:false' + '"';}else if (typeof uri == 'string') {iframeHtml += ' src="' + uri + '"';}}iframeHtml += ' />';jQuery(iframeHtml).appendTo(document.body);return jQuery('#' + frameId).get(0);},createUploadForm : function(id, fileElementId, data) {// create formvar formId = 'jUploadForm' + id;var fileId = 'jUploadFile' + id;var form = jQuery('<form action="" method="POST" name="'+ formId + '" id="' + formId+ '" enctype="multipart/form-data"></form>');if (data) {for ( var i in data) {jQuery('<input type="hidden" name="' + i + '" value="'+ data[i] + '" />').appendTo(form);}}var oldElement = jQuery('#' + fileElementId);var newElement = jQuery(oldElement).clone();jQuery(oldElement).attr('id', fileId);jQuery(oldElement).before(newElement);jQuery(oldElement).appendTo(form);// set attributesjQuery(form).css('position', 'absolute');jQuery(form).css('top', '-1200px');jQuery(form).css('left', '-1200px');jQuery(form).appendTo('body');return form;},ajaxFileUpload : function(s) {// TODO introduce global settings, allowing the client to modify// them for all requests, not only timeouts = jQuery.extend({}, jQuery.ajaxSettings, s);var id = new Date().getTime()var form = jQuery.createUploadForm(id, s.fileElementId,(typeof (s.data) == 'undefined' ? false : s.data));var io = jQuery.createUploadIframe(id, s.secureuri);var frameId = 'jUploadFrame' + id;var formId = 'jUploadForm' + id;// Watch for a new set of requestsif (s.global && !jQuery.active++) {jQuery.event.trigger("ajaxStart");}var requestDone = false;// Create the request objectvar xml = {}if (s.global)jQuery.event.trigger("ajaxSend", [ xml, s ]);// Wait for a response to come backvar uploadCallback = function(isTimeout) {var io = document.getElementById(frameId);try {if (io.contentWindow) {xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML: null;xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument: io.contentWindow.document;} else if (io.contentDocument) {xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML: null;xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument: io.contentDocument.document;}} catch (e) {jQuery.handleError(s, xml, null, e);}if (xml || isTimeout == "timeout") {requestDone = true;var status;try {status = isTimeout != "timeout" ? "success": "error";// Make sure that the request was successful or// notmodifiedif (status != "error") {// process the data (runs the xml through// httpData regardless of callback)var data = jQuery.uploadHttpData(xml,s.dataType);// If a local callback was specified, fire it// and pass it the dataif (s.success)s.success(data, status);// Fire the global callbackif (s.global)jQuery.event.trigger("ajaxSuccess", [ xml,s ]);} elsejQuery.handleError(s, xml, status);} catch (e) {status = "error";jQuery.handleError(s, xml, status, e);}// The request was completedif (s.global)jQuery.event.trigger("ajaxComplete", [ xml, s ]);// Handle the global AJAX counterif (s.global && !--jQuery.active)jQuery.event.trigger("ajaxStop");// Process resultif (s.complete)s.complete(xml, status);jQuery(io).unbind()setTimeout(function() {try {jQuery(io).remove();jQuery(form).remove();} catch (e) {jQuery.handleError(s, xml, null, e);}}, 100)xml = null}}// Timeout checkerif (s.timeout > 0) {setTimeout(function() {// Check to see if the request is still happeningif (!requestDone)uploadCallback("timeout");}, s.timeout);}try {var form = jQuery('#' + formId);jQuery(form).attr('action', s.url);jQuery(form).attr('method', 'POST');jQuery(form).attr('target', frameId);if (form.encoding) {jQuery(form).attr('encoding', 'multipart/form-data');}else {jQuery(form).attr('enctype', 'multipart/form-data');}jQuery(form).submit();} catch (e) {jQuery.handleError(s, xml, null, e);}jQuery('#' + frameId).load(uploadCallback);return {abort : function() {}};},uploadHttpData : function(r, type) {var data = !type;data = type == "xml" || data ? r.responseXML : r.responseText;// If the type is "script", eval it in global contextif (type == "script")jQuery.globalEval(data);// Get the JavaScript object, if JSON is used.if (type == "json")eval("data = " + data);// evaluate scripts within htmlif (type == "html")jQuery("<div>").html(data).evalScripts();return data;},handleError : function(s, xhr, status, e) {// If a local callback was specified, fire itif (s.error) {s.error.call(s.context || s, xhr, status, e);}// Fire the global callbackif (s.global) {(s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [ xhr, s, e ]);}}})
PHP上传图片类Upload.php相关推荐
- php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能
有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下 /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/ ...
- 超级好用的一个php上传图片类(随机名_缩略图_加水印),超级好用的一个php上传图片类(随机名,缩略图,加水印)...
Upimages.class.php php上传类 复制代码代码如下: class UpImages { var $annexFolder = "upload";//附件存放点,默 ...
- VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)
上次用VC写了个MFC环境下的post数据类,地址: /Html/diannaojishu/2009-10/4905858580.html 这次将这个类进行扩展,可以post图片.但这两个post所使 ...
- Upload上传图片
实现antd上传图片,Upload 组件可以上传多张图片,多张图片上传成功的效果图: 每次上传 onChange 回调函数都会执行一次并且里面接收一个JSON对象,其中 file 对象是本次上传的图片 ...
- Play框架文件上传Upload、FileUpload类使用详解
最近做一个前后台分离的项目,要用到前端页面传递文件对象给后端,就研究了一下框架中自带的类Upload接口.FileUpload类. 1. 后端的控制器能够接收到play.mvc.Http.Reques ...
- cocos Creator android 上传图片与数据
1,从相册 相机中获取图片 a),自定义变量 private static Context context;public static AppActivity app ;private static ...
- 使用Java实现上传图片到七牛云
文章目录 1.登录七牛云官网,注册账号并登录 2.在项目中导入七牛云依赖 3.编写创建文件名工具类 4.编写连接七牛云工具类 5.编写前端请求的Controller 6.上传成功 1.登录七牛云官网, ...
- Ajax简单异步上传图片并回显
前台代码 上传图片按钮 <a href="javascript:void(0)" onclick="uploadPhoto()">选择图片</ ...
- 微信小程序上传图片、长按删除及预览图片
也是电商里做的上传评论图片之类的,如果用根据我文章中需要改的改一下就可以用了 首先是wxml <view class="conts"><view class=&q ...
最新文章
- Linq to xml API中 XName 的奇怪实现
- 在计算机管理中创建不同的用户,为什么在计算机管理员里创建密码密码总是不符合要求...
- (四)微调ResNet50以诊断COVID-19
- python 特征工程_[译] 基于时序数据的特征工程 --- Python实现
- CodeForces - 245H Palindromes区间dp_记忆化搜索
- python爬虫学习整理——爬虫入门(1)
- 富士施乐Fuji Xerox DocuPrint P158 b 驱动
- jsp中点击验证码刷新验证码
- Recurrent Neural Networks(RNN) 循环神经网络初探
- 汽车标定工具ETAS总线模块ES582.1详情介绍
- UVa 207 - PGA Tour Prize Money(模拟)
- ISV的想法,用友全都懂
- 使用adb命令将手机和至电脑上的文件互传
- 盘点世界十大著名黑客攻击事件
- SVN安全证书问题解决方案
- ASCII的最大值到底是127还是255
- arping命令用法
- 【亚马逊(上海)-AI Lab-DGL】实习生投递+面试(凉经)
- 基于java的中国象棋的设计与实现毕业设计
- plt.savefig保存图片一片空白或者显示内容不完整、错乱
热门文章
- 统计学习 EM算法 Python实现
- Spring Boot 3.0 正式发布,这份升级指南必须收藏
- Android的bootloader
- 化妆品展示网页设计作业 静态HTML化妆品网站 DW美妆网站模板下载 大学生简单网页作品代码 个人网页制作 学生个人网页设计作业
- 选择 FreeBSD 而不是 Linux 的技术性原因
- java8的时间Date比较
- 新仙剑奇侠传java,新仙剑奇侠传问题
- MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别
- 长短期记忆(LSTM)
- 数字孪生技术海上风电场解决方案