2019-07-30 ThinkPHP文件上传
文件上传就是获取到待上传文件的临时路径,把它移动到服务器下的相应文件夹中。
文件上传,必须在表单中的form标签中写入:enctype="multipart/form-data" 才可以上传文件,上传文件使用的是文件域,代码为<input type="file" name="file"/>。
下面写出一个简单的文件上传的html代码:
<html>
<head><title>用户添加</title></head>
<fieldset>
<legend><h3>用户添加</h3></legend>
<form action="add" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br><br>
<input type="hidden" value="{$row['id']}" name="id"/>
用户密码:<input type="password" name="password"><br><br> 用户头像:<input type="file" name="photo"/><br><br> 邮箱号:<input type="text" name="email"><br><br> 手机号:<input type="text" name="mobile"><br><br> <input type="submit" value="提交">
</fieldset>
</form>
</html>
页面效果:
接下来就要进行php处理,接值除了文件外,其他项还与之前无区别,例如接用户名代码为:$name = I('post.name');即可。重点来看一下文件的接值
hinkPHP文件上传操作使用Think\Upload
类,假设前面的表单提交到当前控制器的add方法,我们来看下add方法的实现代码:
public function add(){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{// 上传成功
$this->success('上传成功!');
}
}
在上面的上传代码中,我们先实例化ThinkPHP预先封装好的类,然后里面有很多属性我们可以调用,比如说文件大小、文件类型等,我们可以根据需要进行调用赋值,
然后用对象去调用upload()方法,就上传成功了,我们可以打印一下结果。会发现是:Array ( [photo] => Array ( [name] => news2.jpg [type] => image/jpeg [size] => 89326 [key] => photo [ext] => jpg [md5] => 16da768d0f7784af779f81950cc3c598 [sha1] => 8266f8e701f2b0193131aec862c6b2a5224b9664 [savename] => 5d40290308019.jpg [savepath] => 2019-07-30/ ) );里面有很多值,我们就可以根据这些把图片的路径传入数据库。
完整的上传代码:
//添加处理
public function add(){ $upload = new \Think\Upload();
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
$info = $upload->upload();
//print_r($info);die(); if($info){
$data['name']=I('post.name');
$data['email']=I('post.email');
$data['mobile']=I('post.mobile');
$data['password']=I('post.password');
$data['time']=time();
$data['status']='1';
//拼接路径
$data['photo']='/Uploads/'.$info['photo']['savepath'].$info['photo']['savename'];
$res = D('news');
$row = $res->add($data);
//print_r($row);die();
if($row){
$this->success('添加用户信息成功','/index.php/home/index/index',3);
}else{
$this->error('添加用户信息失败','/index.php/home/index/index',3);
}
}else{
//输出上传失败原因
$this->error($upload->getError());
}
}
上面我们已经说了,上传成功的结果可以进行打印,由此我们可以判断,上传成功后拼接一下路径存入数据库中即可。
在需要修改图片时,我们还是重新上传一张图片,替换掉原路径即可。
//修改的处理页面 接到新值 并且进行修改处理
public function upd(){
$upload = new \Think\Upload();
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
$info = $upload->upload();
if(!empty($info)){
$path='/Uploads/'.$info['photo']['savepath'].$info['photo']['savename'];
$data['photo']=$path;
}
$res = D('news');
$data['name']=I('post.name');
$data['email']=I('post.email');
$data['mobile']=I('post.mobile');
$data['password']=I('post.password');
$data['status']=I('post.status');
$data['time']=time();
$id = I('post.id');
//echo $id;
$where = array('id'=>$_POST['id']);
$row = $res->where($where)->save($data);
if($row)
{
$this->success('修改用户信息成功','/index.php/home/index/index');
}else{
$this->error('修改用户信息失败','/index.php/home/index/index');
}
}
补充点:
1.url的规则
系统默认的规范是根据URL里面的模块名、控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法。
例如:http://www.shop.com/index.php/home/index/index;
http://www.shop.com是配置的域名,index.php是入口文件,home是模块,index是控制器名,index是控制器下的一个方法。
2.不输入入口文件也能访问到的路径
如果想省去入口文件路径,那么在入口文件的同级目录下建立一个重写文件.htaccess即可,里面的代码如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
3.自动生成模块文件
如果我们想让ThinkPHP帮我们自动生成一个模块文件夹,只需要在入口文件里面加入define('BIND_MODULE','要生成的模块名');然后访问一下入口文件即可。在生成后把该行代码屏蔽掉。
4.查询结果不为自己的所有人的信息 把neq 改为 eq 即查询自己的信息
$res = D('news');
/*查询结果不为自己的所有人的信息 把neq 改为 eq 即查询自己的信息
$data['name']=array('neq',$cookie);
$row = $res->where($data)->select();
*/
2019-07-30 ThinkPHP文件上传的更多相关文章
- thinkphp文件上传以及图片处理
文件上传 上传表单 在ThinkPHP中使用上传功能无需进行特别处理.例如,下面是一个带有附件上传的表单提交: <form action="__URL__/upload" e ...
- ThinkPHP文件上传类
TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...
- ThinkPHP 文件上传到阿里云OSS上(干货)
参考:http://www.thinkphp.cn/extend/789.html 1.前往阿里云github下载SDK包:https://github.com/aliyun/aliyun-oss-p ...
- Thinkphp文件上传
1.在IndexController.class.php里面写2个方法,shangchuan用来显示页面,upload是上传文件的方法. <?php namespace Home\Control ...
- thinkphp 文件上传
form表单中 enctype="multipart/form-data" public function upload() { import('ORG.Net.U ...
- vue大文件上传组件选哪个好?
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- web实现大文件上传分片上传断点续传
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- 使用JS实现可断点续传的文件上传方案
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- vue大文件上传插件选哪个好?
文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...
随机推荐
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- 安装glibc
wget http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gztar -zxvf glibc-2.23.tar.gz cd glibc-2.23 mkdir b ...
- Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.qingmu.mybaitsplus.mapper.UserMapper' available:
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...
- destoon中get_maincat函数的用法
求解get_maincat函数的用法,如get_maincat(0, $CATEGORY, 1),其中第一.二.三个参数分别表示什么,有谁知道,请介绍下,谢谢! 答:get_maincat() 三个参 ...
- offsetHeight在不同的浏览器下取值不同
今天在调js的时候,发现firefox和IE在取document.body.offsetHeight的值的时候结果不一样.上网查了一下,发现如下结果: 这四种浏览器分别为IE(Internet E ...
- div垂直居中水平居中css
width: 860px; height: 500px; position: absolute; margin-left: -430px; margin-top: -250px; top: 50%; ...
- 洛谷P5020 货币系统
题目 题意简化一下就是找题目给定的n个数最多能消掉多少个,我们用个tong[i]来记录i这个数值能不能用小于等于i的货币组合起来,等于1意味着他只能由自己本身的货币组成,等于2说明他可以被其他货币组成 ...
- 第08组 Beta冲刺(1/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 检测网站不合理的地方,给组员定下相应时间进度的安排 展示GitHub当 ...
- Computer-Hunters——凡事预则立
Computer-Hunters--凡事预则立 冲刺时间安排 时间 前端计划完成工作 11.6 完成用户注册登录界面,个人信息界面,以及热点资讯界面 11.7-11.8 匹配界面,电脑猎场界面 11. ...
- mysql(七)查询基本语法
连接 外连接 如表-------------------------------------------------table1 | table2 |------------------------- ...