工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人。

thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php

废话不多说,直接上真的。

源码分享地址:http://pan.baidu.com/s/1qXuMGGk

建立一个数据库:

username:上传者。

time:上传时间

size:文件大小。

path:路径。

filename:上传的文件名。

savename:上传后保存的加密文件名称。

对文件的上传,操作,先建立可视化界面。

如图:

视图代码不贴了,核心代码如下:

但是提交的form表单有一个是必须声明的:

<form action="" method="post" enctype="multipart/form-data">

  1. public function addFile(){
  2. $data['username'] = I('name');
  3. $data['time'] = time();
  4.  
  5. $config = array(
  6. 'maxSize'=> 31457280,
  7. 'rootPath' => './Static/',
  8. 'savePath'=>'',
  9. 'saveRule'=>'time',
  10. 'allowExts'=>'array()',
  11. );
  12.  
  13. $upload = new \Think\Upload($config);
  14.  
  15. $info = $upload->upload();
  16. if(!$info){
  17. $this->error('添加失败......',U('Upload/index'));
  18. }else{
  19. $imgurl = '/Static/'.$info['path']['savepath'].$info['path']['savename'];
  20. }
  21.  
  22. $size = $info['path']['size']/1024;
  23. $data['path'] = $imgurl;
  24. $data['size'] = sprintf("%.2f", $size);
  25. $data['filename'] = $info['path']['name'];
  26. $data['savename'] = $info['path']['savename'];
  27. $obj = M('upload');
  28.  
  29. $res = $obj->data($data)->add();
  30.  
  31. if($res){
  32. $this->success('上传成功!!',U('Upload/index'));
  33. }else{
  34. $this->error('上传失败!!',U('Upload/index'));
  35. }
  36. }

点击提交,文件即可上传成功。

另外是文件的删除了,记住一个方法就可以很好解决一个问题,就是unlink();

代码为:

  1. //文件删除
  2. public function delFile(){
  3. $where['id'] = I('id');
  4. $obj = M('upload');
  5. $list = $obj->where($where)->find();
  6. if(empty($list)){
  7. $this->error('文件不存在或者已经被删除',U('Upload/fileList'));
  8. }else{
  9. $del = $obj->where($where)->delete();
  10. $path = $_SERVER['DOCUMENT_ROOT']."power".$list['path'];//找到文件地址,echo即可
  11.  
  12. $res = unlink($path);//删除文件
  13. if($res){
  14. $this->success('文件成功删除!!',U('Upload/fileList'));
  15. }else{
  16. $this->error('文件删除失败或者文件不存在!!',U('Upload/fileList'));
  17. }
  18. }
  19. }

更新文件操作:

  1. //文件的更新,编辑操作
  2. public function editFileController(){
  3. $where['id'] = I('id');
  4. $oldpath = $_SERVER['DOCUMENT_ROOT']."power".I('oldpath');//获取原文件存放地址
  5. unlink($oldpath);
  6.  
  7. //更新文件操作
  8. $config = array(//配置上传文件信息
  9. 'maxSize'=> 31457280,
  10. 'rootPath' => './Static/',
  11. 'savePath'=>'',
  12. 'saveRule'=>'time',
  13. 'allowExts'=>'array()',
  14. );
  15.  
  16. $upload = new \Think\Upload($config);
  17. $info = $upload->upload();
  18. if(!$info){
  19. $this->error('文件更新失败......',U('Upload/index?$w here[id]'));
  20. }else{
  21. $imgurl = '/Static/'.$info['path']['savepath'].$info['path']['savename'];
  22. }
  23.  
  24. //更新的数据
  25. $data['username'] = I('username');//文件上传者
  26. $data['time'] = time();//文件更新日期
  27. $data['path'] = $imgurl;//文件路径
  28. $data['filename'] = $info['path']['name'];//文件名称
  29.  
  30. $obj = M('upload');
  31.  
  32. $res = $obj->where($where)->data($data)->save();
  33.  
  34. if($res){
  35. $this->success('更新成功。。。',U('Upload/fileList'));
  36. }else{
  37. $this->error('更新失败。。。',U('Upload/fileList'));
  38. }
  39. }

下载文件操作:

  1. //文件下载
  2. public function downloadFile(){
  3. $where['data'] = I('id');
  4. $obj = M('upload');
  5. $list = $obj->where($where)->find();
  6. if(empty($list)){
  7. $this->success('文件不存在或者已经被删除',U('Upload/fileList'));
  8. }else{
  9. $path = $_SERVER['DOCUMENT_ROOT']."power".$list['path'];//找到文件路径
  10. $file_name = $list['filename'];
  11. if(!file_exists($path)){
  12. $this->error("文件不存在!",U('Upload/fileList'));
  13. }
  14. $fp = fopen($path,'r');
  15.  
  16. $file_size=filesize($path);
  17.  
  18. //下载文件需要用到的头
  19. Header("Content-type: application/octet-stream");
  20. Header("Accept-Ranges: bytes");
  21. Header("Accept-Length:".$file_size);
  22. Header("Content-Disposition: attachment; filename=".$file_name);
  23. $buffer=1024;
  24. $file_count=0;
  25. //向浏览器返回数据
  26. while(!feof($fp) && $file_count<$file_size){
  27. $file_con=fread($fp,$buffer);
  28. $file_count+=$buffer;
  29. echo $file_con;
  30. }
  31. fclose($fp);
  32. }
  33. }

既可以成功的操作了。不足之处,请大家指正。

thinkphp对文件的上传,删除,下载操作的更多相关文章

  1. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  2. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  3. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  4. SecureCRT使用sz和rz命令进行文件的上传和下载

    SecureCRT可以使用sz和rz命令进行文件的上传和下载. sz文件下载: 格式:sz 文件名称 即可将服务器的文件下载至本地. rz文件上传: 格式:rz 文件名称 即可将本地文件上传至服务器. ...

  5. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  6. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  7. Apache FtpServer 实现文件的上传和下载

    1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...

  8. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  9. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  10. 黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

    黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数 ...

随机推荐

  1. ReiserFS与EXT3的比较

    ReiserFS与EXT3的比较 最近,我刚从ReiserFS文件系统转到了ext3日志文件系统.我是一个ReiserFS的忠实追随者,并且直到现在我也没有改变我对该文件系统的看法.我之所以转而使用e ...

  2. Snowflake Snow Snowflakes(哈希,大素数取模)

    Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 27277   Accepted: 7197 Description You ...

  3. Linux Kernel ‘test_root()’函数本地拒绝服务漏洞

    漏洞名称: Linux Kernel ‘test_root()’函数本地拒绝服务漏洞 CNNVD编号: CNNVD-201306-432 发布时间: 2013-06-25 更新时间: 2013-06- ...

  4. Qt入门(12)——Qt国际化

    应用的国际化就是使应用成为能被非本国的人使用的过程.有的情况下,国际化很简单,例如,使一个US应用可被Australian或者British用户理解,工作可能少于几个拼写修正.但是使一个US应用可以被 ...

  5. Unix/Linux运维首选工具Xmanager Enterprise 3.0的使用教程

    管理Uinx和Linux服务器的兄弟们应该很熟悉Xmanager,一个窗口可以同时控制上百台Linux和Unix服务器,功能非常强大!^_^请看: manager是一个简单易用的高性能的运行在Wind ...

  6. poj3186 Treats for the Cows

    http://poj.org/problem?id=3186 Treats for the Cows Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  7. HDU4003 Find Metal Mineral

    看别人思路的 树形分组背包. 题意:给出结点数n,起点s,机器人数k,然后n-1行给出相互连接的两个点,还有这条路线的价值,要求最小花费 思路:这是我从别人博客里找到的解释,因为很详细就引用了 dp[ ...

  8. 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)

    洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...

  9. [转载]Python兵器谱

    转载自:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然 ...

  10. 高频交易:Solarflare组建超低延迟网络

    10Gb以太网适配器制.网卡造商Solarflare目前正在将自己的网卡系列产品转变为服务器产品.其产品在金融领域有着广泛的应用. Solarflare首先将现场可编程门阵列(FPGA)放入网络适配器 ...