以前作一个上传下载的项目,发现网上的和本身需求不是很同样,翻阅了下书籍和整理了下网上的一些代码。作了一个上传下载的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浏览器