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相关推荐

  1. php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能

    有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下 /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/ ...

  2. 超级好用的一个php上传图片类(随机名_缩略图_加水印),超级好用的一个php上传图片类(随机名,缩略图,加水印)...

    Upimages.class.php php上传类 复制代码代码如下: class UpImages { var $annexFolder = "upload";//附件存放点,默 ...

  3. VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)

    上次用VC写了个MFC环境下的post数据类,地址: /Html/diannaojishu/2009-10/4905858580.html 这次将这个类进行扩展,可以post图片.但这两个post所使 ...

  4. Upload上传图片

    实现antd上传图片,Upload 组件可以上传多张图片,多张图片上传成功的效果图: 每次上传 onChange 回调函数都会执行一次并且里面接收一个JSON对象,其中 file 对象是本次上传的图片 ...

  5. Play框架文件上传Upload、FileUpload类使用详解

    最近做一个前后台分离的项目,要用到前端页面传递文件对象给后端,就研究了一下框架中自带的类Upload接口.FileUpload类. 1. 后端的控制器能够接收到play.mvc.Http.Reques ...

  6. cocos Creator android 上传图片与数据

    1,从相册 相机中获取图片 a),自定义变量 private static Context context;public static AppActivity app ;private static ...

  7. 使用Java实现上传图片到七牛云

    文章目录 1.登录七牛云官网,注册账号并登录 2.在项目中导入七牛云依赖 3.编写创建文件名工具类 4.编写连接七牛云工具类 5.编写前端请求的Controller 6.上传成功 1.登录七牛云官网, ...

  8. Ajax简单异步上传图片并回显

    前台代码 上传图片按钮 <a href="javascript:void(0)" onclick="uploadPhoto()">选择图片</ ...

  9. 微信小程序上传图片、长按删除及预览图片

    也是电商里做的上传评论图片之类的,如果用根据我文章中需要改的改一下就可以用了 首先是wxml <view class="conts"><view class=&q ...

最新文章

  1. Linq to xml API中 XName 的奇怪实现
  2. 在计算机管理中创建不同的用户,为什么在计算机管理员里创建密码密码总是不符合要求...
  3. (四)微调ResNet50以诊断COVID-19
  4. python 特征工程_[译] 基于时序数据的特征工程 --- Python实现
  5. CodeForces - 245H Palindromes区间dp_记忆化搜索
  6. python爬虫学习整理——爬虫入门(1)
  7. 富士施乐Fuji Xerox DocuPrint P158 b 驱动
  8. jsp中点击验证码刷新验证码
  9. Recurrent Neural Networks(RNN) 循环神经网络初探
  10. 汽车标定工具ETAS总线模块ES582.1详情介绍
  11. UVa 207 - PGA Tour Prize Money(模拟)
  12. ISV的想法,用友全都懂
  13. 使用adb命令将手机和至电脑上的文件互传
  14. 盘点世界十大著名黑客攻击事件
  15. SVN安全证书问题解决方案
  16. ASCII的最大值到底是127还是255
  17. arping命令用法
  18. 【亚马逊(上海)-AI Lab-DGL】实习生投递+面试(凉经)
  19. 基于java的中国象棋的设计与实现毕业设计
  20. plt.savefig保存图片一片空白或者显示内容不完整、错乱

热门文章

  1. 统计学习 EM算法 Python实现
  2. Spring Boot 3.0 正式发布,这份升级指南必须收藏
  3. Android的bootloader
  4. 化妆品展示网页设计作业 静态HTML化妆品网站 DW美妆网站模板下载 大学生简单网页作品代码 个人网页制作 学生个人网页设计作业
  5. 选择 FreeBSD 而不是 Linux 的技术性原因
  6. java8的时间Date比较
  7. 新仙剑奇侠传java,新仙剑奇侠传问题
  8. MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别
  9. 长短期记忆(LSTM)
  10. 数字孪生技术海上风电场解决方案