直接贴上一个完整的代码


/**
* 图片上传方法
* @return [type] [description]
*/ /**
* 1 获取到文件
* 2 验证文件的形状是不是符合上传的规则
* 3 if(true)-> 将他储存到相应的位置
* 4 if(false) -> 返回错误信息
* 5 检查是否储存到了相应位置
* 6 if(false) -> 提示错误信息
*/
public function upload($module='admin',$use='admin_thumb'){
  if($this->request->file('file')){
  //获取文件
   $file = $this->request->file('file');
  }else{
  $res['code']=1;
  $res['msg']='没有上传文件';
  return json($res);
  }   //has 方法来检测一个变量参数是否设置 param:获取数据
  $module = $this->request->has('module') ? $this->request->param('module') : $module;//模块   $web_config = Db::name('webconfig')->where('web','web')->find();
  /**
   * config:获取数据
  * DS :DIRECTORY_SEPARATOR,文件分隔符,用来统一linux和win下的斜线("/")和反斜线("\")
   * EXT : Extension,文件扩展名。也就是file.php中.后面的的php
   * 下面是添加的路径
  * 文件/路劲
  */、   $attPath = config('static_path').DS. $module;
  $attUrl = config('static_url').DS. $module;
  
  /**
  * 验证上传图片是否符合规定图片形状
  * validate 封装在 thinkphp
  * move(“路径”)移动到某一个路径下
  * rule:规则
  */
  
  $info = $file->validate(['size'=>$web_config['file_size']*1024,'ext'=>$web_config['file_type']])->rule('date')->move($attPath);   //移动成功
  if($info) {
//写入到附件表
$data = [];
$data['module'] = $module; //模型
$data['filename'] = $info->getFilename();//文件名
  
  /**
   * getSaveName
   * 输出文件的位置以及文件名。
   * 系统会自动创建以时间为名的文件夹,然后输出文件夹的名字和图片的名字。
  */   $data['filepath'] = $attUrl. DS . $info->getSaveName();   // 获得输出文件名的后缀
  $data['fileext'] = $info->getExtension();   // 获得文件大小
  $data['filesize'] = $info->getSize();   // 获取时间
  $data['create_time'] = time();   // 获取IP
  $data['uploadip'] = $this->request->ip();   // has:参数是否被设置!
  $data['user_id'] = Session::has('admin') ? Session::get('admin') : 0;   if($data['module'] = 'admin') {
   //通过后台上传的文件直接审核通过
   $data['status'] = 1;
  $data['admin_id'] = $data['user_id'];
  $data['audit_time'] = time();
  }
  //用处
  $data['use'] = $this->request->has('use') ? $this->request->param('use') : $use;//用处   //如果获取到pic值 则不保存到附件表,直接返回图片路径到外面操作( 保存到对应数据表pic字段 )   if(!isset($_POST['pic'])){    //insertGetId(“被插入的数据”):获取插入的数据的主键
  $res['id'] = Db::name('attachment')->insertGetId($data);
  addlog($res['id']);//记录日志
  }   /**
  * getSaveName
   * 输出文件的位置以及文件名。
  * 系统会自动创建以时间为名的文件夹,然后输出文件夹的名字和图片的名字。
  */   $res['src'] = $attUrl . DS . $info->getSaveName();
  $res['code'] = 2;
  return json($res);   } else {
// 上传失败获取错误信息
return $this->error('上传失败:'.$file->getError());
    }
  }

 
												

TP5 上传文件的更多相关文章

  1. 关于 tp5.0 阿里云 oss 上传文件操作

    tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题  应该是移动后的路劲(相对于服 ...

  2. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片

    **TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...

  3. tp5上传压缩包到相应文件并自动解压到相应文件下

    <?phpnamespace app\admin\controller\upload; use app\common\controller\Backend;use think\db;use th ...

  4. IE8/9 JQuery.Ajax 上传文件无效

    IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...

  5. 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader

    发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"up ...

  6. asp.net mvc 上传文件

    转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html 0.下载 http://files.cnblogs.com/files/fonour/aj ...

  7. app端上传文件至服务器后台,web端上传文件存储到服务器

    1.android前端发送服务器请求 在spring-mvc.xml 将过滤屏蔽(如果不屏蔽 ,文件流为空) <!-- <bean id="multipartResolver&q ...

  8. .net FTP上传文件

    FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...

  9. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

随机推荐

  1. ETL工具的功能和kettle如何来提供这些功能

    不多说,直接上干货! 大家会有一个疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了 ...

  2. PSSecurityException之PowerShell权限设置

    Windows下PowerShell默认的权限级别是Restricted,不允许执行PS脚本(即.ps1文件).如果在Restricted权限级别下运行,会得到错误信息: .\XXXX.ps1 : F ...

  3. struts2学习之基础笔记2

    6.5 Struts2 的基本配置 1web.xml 作用:加载核心过滤器 格式: <filter> ``````` </filter> <filter-mapping& ...

  4. Eclipse schema xml提示

    步骤一:确定xsd文件位置 spring-framework-3.2.0.RELEASE\schema\beans  步骤二:复制路径  步骤三:搜索“xml catalog”  步骤四:添加约束提示 ...

  5. sass的用法小结(四)进阶篇

    Sass 的数据类型 Sass 既然有了类似编程语言的功能,自然也就有了简单的数据类型.这里简单的介绍一些 Sass 中的数据类型,因为在后面的讨论中要用到有关的内容. Sass 中主要有六种数据类型 ...

  6. CentOS7-1810 系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

  7. Html标记语言学习一2017年6月12日

    今天主要学习了 frame的用法. <frameset> 可以将网页分成几个不同的部分 使用 cols  和  rows 两种标记.前者是列,后者是行 <frame/>  单标 ...

  8. C语言的常用printf打印占位符%d, %u, %f, %s, %c, %o, %x

    占位符含义及用法 代码: #include <stdio.h> int main(int argc, char const *argv[]) { , b = -; // 默认10进制赋值 ...

  9. 洛谷1345 [Usaco5.4]奶牛的电信

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  10. BZOJ1567 [JSOI2008]Blue Mary的战役地图(二分+二维hash)

    题意 问边长为n的两个正方形中最大的相等子正方形.(n<=50) 题解 用到了二维hash,感觉和一维的不太一样. 对于列行有两个不同的进制数然后也是通过类似前缀和的方法差分出一个矩形的hash ...