php上传下载文件

以前作一个上传下载的项目,发现网上的和本身需求不是很同样,翻阅了下书籍和整理了下网上的一些代码。作了一个上传下载的demo,上传经过php自己的uploadfile函数,并返回以时间戳命名的文件名后,把文件名插入到数据库;下载则是把文件输出给浏览器,让浏览器来执行下载过程。
不一样版本php语法可能不一样,另外代码可能会有冗余的地方,若是有错误的地方或者有能够改进的地方,请不吝赐教。php

下面附上代码:html

upload.php(上传文件代码)注意要建upload(指定上传目录)文件夹mysql

 1 <?php require_once('Connections/connect.php');//数据库链接文件
 2 session_start();//开启session                              
 3 header("content-type:text/html;charset=gb2312");
 4     header("Content-Type:text/html;charset=utf8"); 
 5     header("Access-Control-Allow-Origin: *"); //解决跨域
 6     header('Access-Control-Allow-Methods:POST');// 响应类型  
 7     mysql_select_db("upload", $testupload); //选择数据库
 8     mysql_query("SET NAMES utf8");//解决中文乱码问题
 9        $extension = end(explode(".", $_FILES["file"]["name"]));// 获取文件后缀名
10                    
11     if ($_FILES["file"]["error"] > 0)  
12       {  
13       echo "错误: " . $_FILES["file"]["error"] . "<br />";  
14       }
15       /*//限制上传文件类型及大小
16       elseif (!(($_FILES["file"]["type"]=="image/jpeg" || $_FILES["file"]["type"]=="image/png") && $_FILES["file"]["size"]<1024000)) {
17             echo "该文件不能被上传!";
18         }*/ 
19            /*//判断文件是否存在
20         elseif(file_exists($filename))
21         {
22             echo "该文件已存在!";
23         }*/  
24     else  
25       {  
26     $uid = $_SESSION['IDD'];//用户ID
27     date_default_timezone_set("PRC");//设置时区
28     $date=date('Ymdhis');//获取时间戳
29      $titles = $_POST['titles'];//获取输入标题
30      $author = $_SESSION['userss'];//获取当前登陆用户名用以返回上传者信息
31     $info = $date;    //获取前文时间戳赋值给info方便插入info字段
32      $confname = "$date";//获取前文时间戳
33     $files='http://localhost/uploadtest/upload/'. $confname .'.'. $extension;  //获取上传文件地址:网址+文件名(时间戳+扩展名)
34     $filesname=$confname .'.'. $extension;//获取文件名(时间戳重命名后的文件名)
35       
36     //插入数据到数据库 
37     $strsql = "insert into upload (uid,titles,files,filesname,info,author) values('$uid','$titles','$files','$filesname','$info','$author')";
38  
39             $result = @mysql_query($strsql);
40         
41       
42  //执行上传操做,设置utf8防止乱码,并指定上传目录为upload
43          move_uploaded_file($_FILES["file"]["tmp_name"],iconv("UTF-8", "gb2312", "upload/".$confname .'.'. $extension));
44 
45 
46 header("location:index.php");
47 }                 

download.php(下载文件代码)git

 1 <?php  
 2 $file_name = $_GET['name'];     //获取下载文件名   
 3 $file_dir = $_GET['dir'];        //获取下载文件存放目录    
 4 //检查文件是否存在    
 5 if (! file_exists ( $file_dir . $file_name )) {   
 6     header('HTTP/1.1 404 NOT FOUND');  
 7 } else {    
 8     //清除表头信息,没有会形成乱码,图片不能显示等问题
 9      ob_clean();
10     //以只读和二进制模式打开文件        
11     $file = fopen ( $file_dir . $file_name, "rb" ); 
12 
13     //告诉浏览器这是一个文件流格式的文件    
14     Header ( "Content-type: application/octet-stream" ); 
15     //请求范围的度量单位  
16     Header ( "Accept-Ranges: bytes" );  
17     //Content-Length是指定包含于请求或响应中数据的字节长度    
18     Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
19     //用来告诉浏览器,文件是能够当作附件被下载,下载后的文件名称为$file_name该变量的值。      
20  Header ( "Content-Disposition: attachment; filename=" . $file_name );    
21     //读取文件内容并直接输出到浏览器    
22     echo fread ( $file, filesize ( $file_dir . $file_name ) );    
23     fclose ( $file );
24 
25     exit ();    
26 }
前台及数据库文件就不码了
有须要完整demo的能够访问github:https://github.com/2-1-1/www/tree/master/testupload

项目目录github

根目录文件夹:webweb

根目录下文件:index.html(登陆页面),login.php(登陆注销处理页面),index.php(文件列表及下载展现页面),upload.html(上传页面),upload.php(上传处理页面),download.php(下载处理页面)。sql

  次级目录文件夹:Connections数据库

     次级目录下文件:connect.php跨域

  次级目录文件夹:upload浏览器

相关文章
相关标签/搜索