zoukankan      html  css  js  c++  java
  • 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);
    ?>
  • 相关阅读:
    [转]进程间通信----pipe和fifo
    [转]udev
    [转]netlink
    [转]进程间通信-----管道
    [转]socket
    [转]armv8 memory system
    [转]内核态和用户态
    [转]dpdk内存管理
    meeting and robert rules
    notion
  • 原文地址:https://www.cnblogs.com/pcyy/p/5626135.html
Copyright © 2011-2022 走看看