图片上传下载
思路:
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>
<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); //输出一个文件