Home php教程 php手册 ThinkPHP图片上传

ThinkPHP图片上传

Jun 13, 2016 am 09:41 AM
aspnet software programming

  ThinkPHP是国内比较流行的轻量级的PHP框架,它在国内流行的一个最主要的因素在于它的说明文档非常健全完善,以及它源码内的注释都是中文的,方便于英语能力较差的程序员学习.

图片上传在网站里是很常用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php)。方便于我们去实现图片上传功能.

1.我们首先需要创建一个表

<span 1</span> CREATE TABLE <span IF</span><span  NOT EXISTS `tp_image` (
</span><span 2</span>   `id` int(11) NOT <span NULL</span> AUTO_INCREMENT,
<span 3</span>   `image` varchar(200) NOT <span NULL</span>,
<span 4</span>   `create_time` int(11) NOT <span NULL</span>,
<span 5</span>   PRIMARY <span KEY</span><span  (`id`)
</span><span 6</span> ) ENGINE=MyISAM  <span DEFAULT</span> CHARSET=utf8;
Copy after login

2.然后再conf文件里添加配置(最后一段配置是可选的,只是为了方便统一管理URL路径)

<?<span php
</span><span return</span> <span array</span><span (
        </span>'URL_MODEL'    =>    2, <span //</span><span  如果你的环境不支持PATHINFO 请设置为3</span>
        'DB_TYPE'    =>    'mysql',
        'DB_HOST'    =>    'localhost',
        'DB_NAME'    =>    'thinkphp',
        'DB_USER'    =>    'root',
        'DB_PWD'    =>    '',
        'DB_PORT'    =>    '3306',
        'DB_PREFIX'    =>    'tp_',
        
        'SHOW_PAGE_TRACE' =><span true</span>,        <span //</span><span 显示页面调试明细</span>
        
        'TMPL_PARSE_STRING' =>  <span array</span>( <span //</span><span  地址替换,用_UPLOAD_目录 代替 根目录下的Upload目录</span>
         '__UPLOAD__'    =>  __ROOT__.'/Uploads',<span 
     )</span>,<span 
);
</span>?>
Copy after login

3.添加一个Image模块(名字可以随便取)

<?<span php
    </span><span class</span> ImageAction <span extends</span><span  Action{        
        
        </span><span /*</span><span *
         * 创建index 入口方法
         </span><span */</span>
        <span public</span> <span function</span><span  index(){
            </span><span $image</span>=M('Image'<span );                       
            </span><span $data</span>=<span $image</span>->order('create_time desc')->find();    <span //</span><span 获取最后上传图片</span>
            <span $this</span>->assign('data',<span $data</span><span );
            </span><span $this</span>-><span display();
        }
 
</span>?>        
Copy after login

4.创建相应index视图文件(index.html)

<!DOCTYPE html <span PUBLIC</span> "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
    <span #</span><span img{height:22px; border:#000 2px solid}</span>
    <span #</span><span button{height:30px; width:100px;}</span>
</style>
</head>
<body>
    <div <span class</span>="result" >上传允许文件类型:gif png jpg 图像文件,并生成2张缩略图,其中大图带水印,生成后会删除原图。</div><br>
    <notempty name="data"><img  src="__UPLOAD__/m_{<span $data</span alt="ThinkPHP图片上传" >.image}" /> <img  src="__UPLOAD__/s_{<span $data</span alt="ThinkPHP图片上传" >.image}" /></notempty>
    <form action="__URL__/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="image" id="img"/>
        <input type="submit" value="上传" id="button"> 
    </form>
</body>
</html>
Copy after login

5.选择图片,点击上传按钮后,会跳到Image模块的upload方法上,Image模块上现在还没有这个方法,于是我们创建它

<?<span php
    </span><span class</span> ImageAction <span extends</span><span  Action{        
        
        </span><span /*</span><span *
         * 创建index 入口方法
         </span><span */</span>
        <span public</span> <span function</span><span  index(){
            </span><span $image</span>=M('Image'<span );                        
            </span><span $data</span>=<span $image</span>->order('create_time desc')->find();    <span //</span><span 获取最后上传图片</span>
            
            <span var_dump</span>(<span $data</span><span );
            </span><span $this</span>->assign('data',<span $data</span><span );
            </span><span $this</span>-><span display();
        } <br />               
        </span><span //</span><span 如果上传的文件不为空,跳转到_upload方法</span>
        <span public</span> <span function</span><span  upload(){        
            </span><span //</span><span 如果不为空</span>
            <span if</span>(!<span empty</span>(<span $_FILES</span><span ))
            {
                </span><span $this</span>-><span _upload();
            }
            
        }</span>
Copy after login

6.如果提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能

<?<span php
    </span><span class</span> ImageAction <span extends</span><span  Action{        
        
        </span><span /*</span><span *
         * 创建index 入口方法
         </span><span */</span>
        <span public</span> <span function</span><span  index(){
            </span><span $image</span>=M('Image'<span );                        
            </span><span $data</span>=<span $image</span>->order('create_time desc')->find();    <span //</span><span 获取最后上传图片</span>
            
            <span var_dump</span>(<span $data</span><span );
            </span><span $this</span>->assign('data',<span $data</span><span );
            </span><span $this</span>-><span display();
        } 
        
        
        </span><span //</span><span 如果上传的文件不为空,跳转到_upload方法</span>
        <span public</span> <span function</span><span  upload(){        
            </span><span //</span><span 如果不为空</span>
            <span if</span>(!<span empty</span>(<span $_FILES</span><span ))
            {
                </span><span $this</span>-><span _upload();
            }
            
        }
        
        
        </span><span /*</span><span **
         * 实现图片上传
         </span><span */</span>
        <span public</span> <span function</span><span  _upload(){
            import(</span>'@.ORG.UploadFile'<span );
            </span><span //</span><span 导入上传类</span>
            <span $upload</span> = <span new</span><span  UploadFile();
            </span><span //</span><span 设置上传文件大小</span>
            <span $upload</span>->maxSize            = 3292200<span ;
            </span><span //</span><span 设置上传文件类型</span>
            <span $upload</span>->allowExts          = <span explode</span>(',', 'jpg,gif,png,jpeg'<span );
            </span><span //</span><span 设置附件上传目录</span>
            <span $upload</span>->savePath           = './Uploads/'<span ;
            </span><span //</span><span 设置需要生成缩略图,仅对图像文件有效</span>
            <span $upload</span>->thumb              = <span true</span><span ;
            </span><span //</span><span  设置引用图片类库包路径</span>
            <span $upload</span>->imageClassPath     = '@.ORG.Image'<span ;
            </span><span //</span><span 设置需要生成缩略图的文件后缀</span>
            <span $upload</span>->thumbPrefix        = 'm_,s_';  <span //</span><span 生产2张缩略图
            //设置缩略图最大宽度</span>
            <span $upload</span>->thumbMaxWidth      = '400,100'<span ;
            </span><span //</span><span 设置缩略图最大高度</span>
            <span $upload</span>->thumbMaxHeight     = '400,100'<span ;
            </span><span //</span><span 设置上传文件规则</span>
            <span $upload</span>->saveRule           = 'uniqid'<span ;
            </span><span //</span><span 删除原图</span>
            <span $upload</span>->thumbRemoveOrigin  = <span true</span><span ;
            
            
            </span><span //</span><span 如果上传不成功</span>
            <span if</span> (!<span $upload</span>-><span upload()) 
            {
                </span><span //</span><span 捕获上传异常</span>
                <span $this</span>->error(<span $upload</span>-><span getErrorMsg());
            } 
            </span><span else</span><span  
            {
                </span><span //</span><span 取得成功上传的文件信息</span>
                <span $uploadList</span> = <span $upload</span>-><span getUploadFileInfo();
                
                
                </span><span //</span><span 导入图片类</span>
                import('@.ORG.Image'<span );                
            
                </span><span //</span><span 给m_缩略图添加水印, Image::water('原文件路径','水印图片地址')</span>
                Image::water(<span $uploadList</span>[0]['savepath'] . 'm_' . <span $uploadList</span>[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png'<span );
                
                </span><span //</span><span 图片名赋值给 字段image</span>
                <span $_POST</span>['image'] = <span $uploadList</span>[0]['savename'<span ];
            }
            </span><span $model</span>  = M('image'<span );
            </span><span //</span><span 保存当前数据对象</span>
            <span $data</span>['image']          = <span $_POST</span>['image'<span ];
            </span><span $data</span>['create_time']    =<span  NOW_TIME;
            </span><span $list</span>   = <span $model</span>->add(<span $data</span><span );
            </span><span if</span> (<span $list</span> !== <span false</span><span ) 
            {
                </span><span $this</span>->success('上传图片成功!'<span );
            } 
            </span><span else</span><span  
            {
                </span><span $this</span>->error('上传图片失败!'<span );
            }
        }
        
    }
</span>?>
Copy after login

 

最后图片上传成功,生成两张缩略图:

 

 

需要说明的是:

ThinkPHP里自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php),要完整版的ThinkPHP包才有。

没有的话需要在Lib里创建一个文件夹(ORG),然后去官网下载扩展包把这两个文件放到ORG文件夹中。

我的是第二种情况

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The combination of Vue.js and ASP.NET provides tips and suggestions for performance optimization and expansion of web applications. The combination of Vue.js and ASP.NET provides tips and suggestions for performance optimization and expansion of web applications. Jul 29, 2023 pm 05:19 PM

The combination of Vue.js and ASP.NET provides tips and suggestions for performance optimization and expansion of web applications. With the rapid development of web applications, performance optimization has become an indispensable and important task for developers. As a popular front-end framework, Vue.js combined with ASP.NET can help us achieve better performance optimization and expansion. This article will introduce some tips and suggestions, and provide some code examples. 1. Reduce HTTP requests The number of HTTP requests directly affects the loading speed of web applications. pass

Ten ways generative AI will change software development Ten ways generative AI will change software development Mar 11, 2024 pm 12:10 PM

Translator | Reviewed by Chen Jun | Chonglou In the 1990s, when people mentioned software programming, it usually meant choosing an editor, checking the code into the CVS or SVN code base, and then compiling the code into an executable file. Corresponding integrated development environments (IDEs) such as Eclipse and Visual Studio can integrate programming, development, documentation, construction, testing, deployment and other steps into a complete software development life cycle (SDLC), thus improving the work of developers. efficiency. In recent years, popular cloud computing and DevSecOps automation tools have improved developers' comprehensive capabilities, making it easier for more enterprises to develop, deploy and maintain software applications. Today, generative AI is the next generation development

MySQL connection pool usage and optimization techniques in ASP.NET programs MySQL connection pool usage and optimization techniques in ASP.NET programs Jun 30, 2023 pm 11:54 PM

How to correctly use and optimize the MySQL connection pool in ASP.NET programs? Introduction: MySQL is a widely used database management system that features high performance, reliability, and ease of use. In ASP.NET development, using MySQL database for data storage is a common requirement. In order to improve the efficiency and performance of database connections, we need to correctly use and optimize the MySQL connection pool. This article will introduce how to correctly use and optimize the MySQL connection pool in ASP.NET programs.

How to reconnect to MySQL in ASP.NET program? How to reconnect to MySQL in ASP.NET program? Jun 29, 2023 pm 02:21 PM

How to reconnect to MySQL in ASP.NET program? In ASP.NET development, it is very common to use the MySQL database. However, due to network or database server reasons, the database connection may sometimes be interrupted or time out. In this case, in order to ensure the stability and reliability of the program, we need to re-establish the connection after the connection is disconnected. This article will introduce how to reconnect MySQL connections in ASP.NET programs. To reference the necessary namespaces first, reference them at the head of the code file

The combination of Vue.js and ASP.NET enables the development and deployment of enterprise-level applications The combination of Vue.js and ASP.NET enables the development and deployment of enterprise-level applications Jul 29, 2023 pm 02:37 PM

The combination of Vue.js and ASP.NET enables the development and deployment of enterprise-level applications. In today's rapidly developing Internet technology field, the development and deployment of enterprise-level applications has become more and more important. Vue.js and ASP.NET are two technologies widely used in front-end and back-end development. Combining them can bring many advantages to the development and deployment of enterprise-level applications. This article will introduce how to use Vue.js and ASP.NET to develop and deploy enterprise-level applications through code examples. First, we need to install

How to correctly configure and use MySQL connection pool in ASP.NET program? How to correctly configure and use MySQL connection pool in ASP.NET program? Jun 29, 2023 pm 12:56 PM

How to correctly configure and use MySQL connection pool in ASP.NET program? With the development of the Internet and the increase in data volume, the demand for database access and connections is also increasing. In order to improve the performance and stability of the database, connection pooling has become an essential technology. This article mainly introduces how to correctly configure and use the MySQL connection pool in ASP.NET programs to improve the efficiency and response speed of the database. 1. The concept and function of connection pooling. Connection pooling is a technology that reuses database connections. At the beginning of the program,

Using and optimizing transaction performance of MySQL connection pool in ASP.NET Using and optimizing transaction performance of MySQL connection pool in ASP.NET Jun 30, 2023 pm 12:12 PM

How to correctly use and optimize the transaction performance of MySQL connection pool in ASP.NET programs? In ASP.NET programs, database transactions are a very important part. Transactions ensure the consistency and integrity of the database while also providing better performance. When using a MySQL database, it is essential to use connection pools to manage connection resources and optimize performance. First, let us briefly understand the concept of MySQL connection pool. The connection pool is a buffer pool of a group of connections. By pre-initializing a certain number of

What are the built-in objects in aspnet? What are the built-in objects in aspnet? Nov 21, 2023 pm 02:59 PM

The built-in objects in ASP.NET include "Request", "Response", "Session", "Server", "Application", "HttpContext", "Cache", "Trace", "Cookie" and "Server.MapPath": 1. Request, indicating the HTTP request issued by the client; 2. Response: indicating the HTTP response returned by the web server to the client, etc.

See all articles