php上传下载文件

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

下面附上代码:

upload.php(上传文件代码)

<?php require_once('Connections/connect.php');
session_start();
header("content-type:text/html;charset=gb2312");
	header("Content-Type:text/html;charset=utf8"); 
	header("Access-Control-Allow-Origin: *"); //解决跨域
	header('Access-Control-Allow-Methods:POST');// 响应类型  
    mysql_select_db("upload", $testupload); //选择数据库
    mysql_query("SET NAMES utf8");//解决中文乱码问题
       $extension = end(explode(".", $_FILES["file"]["name"]));// 获取文件后缀名


      
        
     


	if ($_FILES["file"]["error"] > 0)  
	  {  
	  echo "错误: " . $_FILES["file"]["error"] . "<br />";  
	  }
	  /*//限制上传文件类型及大小
	  elseif (!(($_FILES["file"]["type"]=="image/jpeg" || $_FILES["file"]["type"]=="image/png") && $_FILES["file"]["size"]<1024000)) {
	    	echo "该文件不能被上传!";
	    }*/ 
	       /*//判断文件是否存在
        elseif(file_exists($filename))
        {
            echo "该文件已存在!";
        }*/  
	else  
	  {  
	$uid = $_SESSION['IDD'];//用户ID
	date_default_timezone_set("PRC");//设置时区
	$date=date('Ymdhis');//获取时间戳
	 $titles = $_POST['titles'];//获取输入标题
	 $author = $_SESSION['userss'];//获取当前登录用户名
    $info = $date;	//获取前文时间戳赋值给info方便插入info字段
	 $confname = "$date";//获取前文时间戳
    $files='http://localhost/uploadtest/upload/'. $confname .'.'. $extension;  //获取上传文件地址:网址+文件名(时间戳+扩展名)
    $filesname=$confname .'.'. $extension;//获取文件名(时间戳重命名后的文件名)
	  
	//插入数据到数据库 
	$strsql = "insert into upload (uid,titles,files,filesname,info,author) values('$uid','$titles','$files','$filesname','$info','$author')";
 
			$result = @mysql_query($strsql);
	    
	  
 //执行上传操作,设置utf8防止乱码,并指定上传目录为upload
	     move_uploaded_file($_FILES["file"]["tmp_name"],iconv("UTF-8", "gb2312", "upload/".$confname .'.'. $extension));


header("location:index.php");
}	     	    

download.php(下载文件代码)

<?php  
$file_name = $_GET['name'];     //获取下载文件名   
$file_dir = $_GET['dir'];        //获取下载文件存放目录    
//检查文件是否存在    
if (! file_exists ( $file_dir . $file_name )) {   
    header('HTTP/1.1 404 NOT FOUND');  
} else {    
    //清除表头信息,没有会造成乱码,图片不能显示等问题
     ob_clean();
    //以只读和二进制模式打开文件        
    $file = fopen ( $file_dir . $file_name, "rb" ); 

    //告诉浏览器这是一个文件流格式的文件    
    Header ( "Content-type: application/octet-stream" ); 
    //请求范围的度量单位  
    Header ( "Accept-Ranges: bytes" );  
    //Content-Length是指定包含于请求或响应中数据的字节长度    
    Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。      
 Header ( "Content-Disposition: attachment; filename=" . $file_name );    
    //读取文件内容并直接输出到浏览器    
    echo fread ( $file, filesize ( $file_dir . $file_name ) );    
    fclose ( $file );

    exit ();    
}

前台及数据库文件就不码了,有需要可以下载完整的demo,链接:https://download.csdn.net/download/z_1_1/11826265
github:https://github.com/2-1-1/www/tree/master/testupload
项目目录

根目录文件夹:web

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

  次级目录文件夹:Connections
      次级目录下文件:connect.php
  次级目录文件夹:upload
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值