PHP文件上传及下载源码

Posted 小面团

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP文件上传及下载源码相关的知识,希望对你有一定的参考价值。

 

  一、文件上传

  前台页面:

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>文件上传</title>
</head>
<body>
<div>
    <form method="post" action="upload.php" enctype="multipart/form-data" >
        用户名<input type="text" name="username"></input>
        <br>
        文件简单介绍<br><textarea name="fileintro" rows="8" cols="50"></textarea>
        <br>选择要上传的文件<br><input type="file" name="myfile"></input><br>
        <input type="submit" value="上传文件"></input>
    </form>
</div>
</body>
</html>
复制代码

  后台处理:

复制代码
<?php
//接收提交页面传送的相关信息
$name = $_POST[\'username\'];
$intro = $_POST[\'fileintro\'];
//$_FILES中存放着文件的相关信息
// echo "<pre>";
// print_r($_FILES);
// echo "</pre>";

//可以在这里对文件大小进行限制
/*$filesize = $_FILES[\'myfile\'][\'size\'];
if($filesize>2*1024*1024){
    echo "文件过大,不能上传";
    exit();
}*/
 
 //可以对文件类型进行限制
 /*$filetype = $_FILES[\'myfile\'][\'type\'];
 if($filetype!=\'image/jpg\'&&$filetype!=\'application/pdf\'){
     echo "文件类型只能是jpg和pdf";
     exit();
 }*/
 
if (is_uploaded_file($_FILES[\'myfile\'][\'tmp_name\'])) {
    //把文件转存到你希望存放的目录
    $uploaded = $_FILES[\'myfile\'][\'tmp_name\'];
    
    //每个用户动态创建一个文件夹
    $userpath = $_SERVER[\'DOCUMENT_ROOT\']."/up/".$name;
    //判断该用户是否已经有文件夹
    if(!file_exists($userpath)){
        mkdir($userpath);
    }
    
    //防止同一用户上传同名文件,可在文件中添加时间戳。
    //$moveto   = $userpath."/".time().$_FILES[\'myfile\'][\'name\'];
    
    //或者对文件名进行修改,但是需要使用字符串处理截得文件后缀名
    $truename = $_FILES[\'myfile\'][\'name\'];
    $moveto   = $userpath."/".time().substr($truename,strrpos($truename,"."));
    
    if(move_uploaded_file($uploaded,iconv("utf-8", "gb2312", $moveto))){
        echo "上传文件".$_FILES[\'myfile\'][\'name\']."成功";
    }else{
        echo "上传文件".$_FILES[\'myfile\'][\'name\']."失败";
    }
}else{
    echo "上传文件".$FILES[\'myfile\'][\'name\']."失败";
}
?>
复制代码

  二、文件下载:

  单文件下载:

复制代码
 <?php
    function down_file($file_name,$file_path){
    //$file_name = iconv("uft-8","gb2312",$file_name);    //如果文件名是中文,需要对中文名称转码gb2312
    //要下载的文件读取到服务器的内存中
    //服务器返回文件数据给浏览器
    //浏览器将文件写入用户指定的位置
    //1.判断文件是否存在
    if(!file_exists($file_name)){
        echo "111";
        return ;
    }
    $fp = fopen($file_name,"r");
    $file_size = filesize($file_name);
    //获取文件大小
    //可通过file_size限制浏览器下载文件大小。
    //返回的文件
    header("Content-type:application/octet-stream");
    //按字节大小返回
    header("Accept-Ranges:bytes");
    //返回文件大小
    header("Accept-Length:$file_size");
    //客户端弹出对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$file_name);
    $buffer = 1024;  
    //定义缓冲区
    //为了下载的安全,最好使用文件字节读取计数器
    $file_count = 0;
    //feof用于判断文件是否读取到文档尾
    while(!feof($fp) && ($file_size-$file_count>0)){
    $file_data = fread($fp,$buffer);
    //统计读了多少个字节
    $file_count+$buffer;
    echo $file_data;   
    //把部分数据会送给浏览器
    }
    fclose($fp);
    //关闭文件
    }
?>
复制代码

  多个文件下载:

  DownList.php:

复制代码
<a href="downprocess.php?filename=1.jpg">down</a><img src="1.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=2.jpg">down</a><img src="2.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=3.jpg">down</a><img src="3.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=4.jpg">down</a><img src="4.jpg" width="50px" height="50px"><br><br>
复制代码

  downprocess.php:

复制代码
<?php
    $filename = $_REQUEST[\'filename\'];
    function down_file($file_name){

    if(!file_exists($file_name)){
        echo "111";
        return ;
    }
    $fp = fopen($file_name,"r");
    $file_size = filesize($file_name);
    header("Content-type:application/octet-stream");
    //按字节大小返回
    header("Accept-Ranges:bytes");
    //返回文件大小
    header("Accept-Length:$file_size");
    //客户端弹出对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$file_name);
    $buffer = 1024;  
    //定义缓冲区
    $file_count = 0;
    //feof用于判断文件是否读取到文档尾
    while(!feof($fp) && ($file_size-$file_count>0)){
        $file_data = fread($fp,$buffer);
        //统计读了多少个字节
        $file_count+$buffer;
        echo $file_data;   
        //把部分数据会送给浏览器
        }
    fclose($fp);
    }
    down_file($filename);
?>

以上是关于PHP文件上传及下载源码的主要内容,如果未能解决你的问题,请参考以下文章

PHP文件上传及下载源码

Hadoop之HDFS原理及文件上传下载源码分析(下)

PHP佳音高清图片上传下载源码

Hadoop之HDFS原理及文件上传下载源码分析(上)

tp3.2 上传文件及下载文件

PHP 大文件上传,支持断点续传,求具体方案、源码或者文件上传插件