PHP.20-图片上传下载

图片上传下载

思路:

  1、创建图片上传的存放目录

    /uploads/

  2、index.php  //浏览页面,提供上传表单 

上传表单:文件上传必须使用enctype="multipart/form-data",且用post提交
<form action="doupload.php" enctype="multipart/form-data" method="post">
浏览图片
<th>序号</th><th>图片</th><th>上传时间</th><th>操作</th>
<?php
     //1、打开目录uploads
$dir = "./uploads/";
if(is_dir($dir)){      //is_dir:判断是否是一个目录
$dh = opendir($dir);

    //2、遍历目录输出图片信息
$i=0;
while(false !== ($file = readdir($dh))){       //while ($file = readdir($handle)) 是错误的遍历方法
if($file != "." && $file != ".."){            //列出当前目录的所有文件并去掉.和..
$i++;

echo "<td><img src='{$dir}{$file}' width='80' height='50'></td>";    //输出图片
echo '<td>'.date("Y-m-d H:i:s", filectime($dir.$file)).'</td>';
echo "<td><a href='{$dir}{$file}'>查看</a>&nbsp;
<a href='download.php?name={$file}'>下载</a></td>";

  //3、关闭目录
closedir();


  3、doupload.php  //图片上传

  //1、获取上传文件信息

$upfile = $_FILES["pic"];
$typelist = array("image/jpeg", "image/png", "image/gif");      //定义允许的类型
$path = "./uploads/";      //定义上传后的目录

  //2、过滤上传文件错误号
if($upfile["error"] > 0){
switch ($upfile["error"]){    //error:1、2、3、4、6、7

  //3、本次上传大小过滤
if($upfile['size'] > 2000000){

  //4、类型过滤
if(!in_array($upfile["type"], $typelist)){

  //5、上传文件重命名(随机获取一个文件名,保留后缀名)
$fileinfo = pathinfo($upfile["name"]);    //pathinfo:解析上传文件名字
do{
  $newfile = date("Y-m-d").rand(1000, 9999).".".$fileinfo["extension"];
}while(
  file_exists($path.$newfile)
);


  //6、执行文件上传
if(is_uploaded_file($upfile["tmp_name"])){    //判断是否是一个上传文件

if(move_uploaded_file($upfile["tmp_name"], $path.$newfile)){  //移动上传文件

  4、download.php  //图片下载功能

  //1、获取要下载的图片名(加上路径)
$file = "./uploads/".$_GET["name"];
  //2、重设响应类型
$info = getimagesize($file);      //获得图像大小
  //3、指定下载的文件名
header("Content-Disposition:attachment;filename=".$_GET["name"]);
  //4、制定文件的大小
header("Content-length:".filesize($file));
  //5、响应内容
readfile($file);      //输出一个文件

原文地址:https://www.cnblogs.com/zixuanfy/p/6721672.html