文件上传就是获取到待上传文件的临时路径,把它移动到服务器下的相应文件夹中。

文件上传,必须在表单中的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文件上传的更多相关文章

  1. thinkphp文件上传以及图片处理

    文件上传 上传表单 在ThinkPHP中使用上传功能无需进行特别处理.例如,下面是一个带有附件上传的表单提交: <form action="__URL__/upload" e ...

  2. ThinkPHP文件上传类

    TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...

  3. ThinkPHP 文件上传到阿里云OSS上(干货)

    参考:http://www.thinkphp.cn/extend/789.html 1.前往阿里云github下载SDK包:https://github.com/aliyun/aliyun-oss-p ...

  4. Thinkphp文件上传

    1.在IndexController.class.php里面写2个方法,shangchuan用来显示页面,upload是上传文件的方法. <?php namespace Home\Control ...

  5. thinkphp 文件上传

    form表单中 enctype="multipart/form-data" public function upload()    {      import('ORG.Net.U ...

  6. vue大文件上传组件选哪个好?

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  7. web实现大文件上传分片上传断点续传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  8. 使用JS实现可断点续传的文件上传方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  9. vue大文件上传插件选哪个好?

    文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...

随机推荐

  1. arXiv上传文章latex源码技巧

    <<2019.09.27>>更新 上传PS文件看来也是不行了,一大早收到邮件被arXiv标记为incomplete了.哎,还是老老实实提交Latex source files吧 ...

  2. contact form 7如何搭配Akismet过滤垃圾邮件

    contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...

  3. DFS_BFS(深度优先搜索 和 广度优先搜索)

    package com.rao.graph; import java.util.LinkedList; /** * @author Srao * @className BFS_DFS * @date ...

  4. Taro,实现小程序在样式文件中导入背景图片

    https://taro-docs.jd.com/taro/docs/static-reference.html 注意点是,控制你的图片大小,然后配置完limit后,把dist删掉,重新运行 npm ...

  5. ESA2GJK1DH1K开发教程: 来看看最新整理的整个开发板的教程大纲吧

    项目开发:教程大纲(测试板型号:ESA2GJK1DH1K) 购买链接: https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.25911deb ...

  6. 【字符串】 Z-algorithm

    Z-algorithm Algorithm Task 给定一个文本串 \(S\) 和一个模式串 \(T\),求 \(T\) 对于 \(S\) 的每个后缀子串的公共前缀子串. Limitations 要 ...

  7. Linux 进程树查看工具 pstree

    pstree 是 Linux 下的一个用于展示进程树结构的工具,类似于 tree 展示目录树一样,可视化地查看进程的继承关系.pstree 工具其实是 PSmisc 工具集的成员之一,PSmisc 工 ...

  8. Spring事务注解@Transactional失效的问题

    在项目中发现事务失效,使用@Transactional注解标注的Service业务层实现类方法全部不能回滚事务了,最终发现使用因为Spring与shiro进行整合之后导致的问题,将所有的Service ...

  9. 【cf补题记录】Codeforces Round #608 (Div. 2)

    比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...

  10. 使用 AI 绘制箭头

    参考下面教程 有空再整理 https://jingyan.baidu.com/article/7082dc1cd77899e40b89bd5a.html http://www.360doc.com/c ...