第25天 - 文件审核系统(3)_上传、下载的部分

今天上传、下载的程序码要参考昨天的文章(标签里的name值)
https://ithelp.ithome.com.tw/articles/10271046

下面是上传档案的程序码,档案都会上传到我专案资料夹底下的"uploads资料夹"
并在"uploads资料夹"底下再新增以帐号命名的资料夹 <<档案就上传在这。

里面有几个 $_FILES 开头的程序码,其实我都不太熟(很少用到它)

<?php
/*按下"点我上传" 新增以帐号命名的资料夹*/
if(isset($_POST['COOK']))
{
    //帐号名称的资料夹 放在 "uploads/" 底下
    $dirname = "uploads/".$_SESSION['auth_user']['user_id'];
    if (!is_dir($dirname)) 
    {
        mkdir($dirname);
    }
}

//下面的 $DE 是我对语法不熟(不知该怎麽用单双引号、dot),为了方便後续撰写
$DE = $_SESSION['auth_user']['user_id'];

/*上传档案:限制大小(10MB)、档案类型(限定pdf)*/
@$img_size = $_FILES['stu_img']['size'];//变数前面的"@"是用来关闭警告提示
@$error = $_FILES['stu_img']['error'];
if ($error === 0 && $AA !="") 
{
    if ($img_size > 10485760)//限制档案大小
    {
        $_SESSION['status'] = "注意!! 档案过大 (最多 10MB)";
        header("Location: index2.php");
    }
    else
    {
        if(isset($_POST['save_stu_img']))
        {
            $doc_type = @$_COOKIE["COOK01"];
            // $phone = $_POST['stu_phone'];
            $iamege = $_FILES['stu_img']['name'];

            $allowed_exttension = array('pdf','PDF');
            $filename_ex = $_FILES['stu_img']['name'];
            $file_exttension = pathinfo($filename_ex ,PATHINFO_EXTENSION);
            if(!in_array($file_exttension,$allowed_exttension))
            {
                $_SESSION['status'] = "档案限定 : pdf";
                header('Location: index2.php');
            }
            else
            {
                $FFILE = $_FILES['stu_img']['tmp_name'];
                $DDEST = "uploads/$DE/".$_FILES["stu_img"]["name"];

                //挡掉重复档名的档案,指定资料夹.你的档案
                if(file_exists("uploads/$DE/".$iamege = $_FILES['stu_img']['name']))
                {
                    $filename = $_FILES['stu_img']['name'];
                    $_SESSION['status'] = "有相同名称的档案存在 :   ".$filename;
                    header('Location: index2.php');
                }
                else
                {
                    $query = "INSERT INTO document(stu_img,id,doc_type)
                              VALUES('$iamege','".$_SESSION['auth_user']['user_id']."','$doc_type')";
                    $query_run = mysqli_query($con,$query);

                    if($query_run)
                    {
                        move_uploaded_file($FFILE,$DDEST);
                        $_SESSION['status'] = "档案上传成功!";
                        setcookie("COOK01","", time()-1200);
                        header('Location: index2.php');
                    }
                    else
                    {
                        $_SESSION['status'] = "档案上传失败!!!!!!";
                        header('Location: index2.php');
                    }
                }
            }	
        }
    }
}
?>

下载的程序码(有两个部分,可搭配昨天列印)
首先是【a标签】使用超连结下载

<a href="index2.php?downl_file=<?php echo $row['stu_img'] ?>">
    <?php echo $row['stu_img']; ?>
</a>

再来是下载本身的程序码

<?php
/*下载*/
if(!empty($_GET['downl_file'])){
    $fileName  = basename($_GET['downl_file']);
    $filePath  = "uploads/$DE/".$fileName;

    if(!empty($fileName) && file_exists($filePath)){
        //define header
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$fileName");
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        ob_clean();//防止档案损毁1
        flush();//防止档案损毁2
        readfile($filePath);
        exit;
    }
    else{
        echo "档案不存在";
    }
}
?>

下次再弄删除档案(因为昨天列印的部分没有弄到这一块)
今天先这样,下次见。


<<:  OpenTelemetry 与 Jaeger 应用 - 2

>>:  [Day 10] 模型达到商业指标的挑战 — Test set performance 的殒落

[Day. 28] Codeigniter 登出

昨天,我们透过session成功让使用者不用重复登入 可是有可能有人需要切换帐户之类的。 所以今天我...

调用 Properties.Resources 全域资源档

有时候难免要使用一些资源档 步骤分为 新增 & 使用 新增 在方案总管的专案上右键 选属性 ...

[教学] 如何使用Visual Studio 内建SQL工具修复资料库

大家好,我是一名菜鸟工程师,这篇文章用来记录我工作遇到的需求及解决方式,如果有更好的解决方式,也欢迎...

C++时间日期,需收费另外再跟我说明

交出来的程序最少都要有headerfile(.h)档和mainfile(.cpp)档这两个档案才行,...

Laravel 实战经验分享 - Day28 API 文件的写法

终於来到倒数的第三篇了,今天来讲讲如何产生 API 文件,我自己觉得 RESTful API 的缺点...