一、html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>上传</h1>
<form action="doc.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="upload"></input>
<input type="file" name="file"></input>
<input type="submit" value="提交"></input>
</form>
<h1>下载</h1>
<a href="doc.php?action=download&filepath=file/20170701-595700d535f09.doc">doc下载</a><br>
<a href="doc.php?action=download&filepath=file/20170701-595700f41e339.docx">docx下载</a><br>
<a href="doc.php?action=download&filepath=file/20170701-595751502f738.pdf">pdf下载</a><br>
<a href="doc.php?action=download&filepath=file/20170701-5957013400166.ppt">ppt下载</a><br>
</body>
</html>
二、PHP
<?php
$action = $_REQUEST['action'];
switch ($action) {
case 'upload':
$file = $_FILES['file'];
$tmp_name = $file['tmp_name'];
$type = substr($file['name'], strrpos($file['name'],'.')+1);
$dir = "./file/";
if(!is_dir($dir)){
mkdir($dir);
}
$filename = date("Ymd").'-'.uniqid();
switch ($type) {
case 'pdf':
if(move_uploaded_file($file['tmp_name'], $dir.$filename.'.pdf')){
$filepath = "picdata/pic/file/$filename.pdf";
echo "<script>alert('上传成功')</script>";
}else{
echo "<script>alert('上传失败,请重新上传')</script>";
exit();
}
break;
case 'doc':
if(move_uploaded_file($file['tmp_name'], $dir.$filename.'.doc')){
$filepath = "picdata/pic/file/$filename.doc";
echo "<script>alert('上传成功')</script>";
}else{
echo "<script>alert('上传失败,请重新上传')</script>";
exit();
}
break;
case "docx":
if(move_uploaded_file($file['tmp_name'], $dir.$filename.'.docx')){
$filepath = "picdata/pic/file/$filename.docx";
echo "<script>alert('上传成功')</script>";
}else{
echo "<script>alert('上传失败,请重新上传')</script>";
exit();
}
break;
case "ppt":
if(move_uploaded_file($file['tmp_name'], $dir.$filename.'.ppt')){
$filepath = "picdata/pic/file/$filename.ppt";
echo "<script>alert('上传成功')</script>";
}else{
echo "<script>alert('上传失败,请重新上传')</script>";
exit();
}
break;
default:
echo "<script>alert('只能上传pdf、doc、docx、ppt格式的文件')</script>";
exit();
break;
}
break;
case 'download':
$filepath = $_REQUEST['filepath'];
$dir = "./file/";
$filename = substr($filepath, strrpos($filepath,'/')+1);//文件名称
$type = substr($filepath, strrpos($filepath,'.')+1);//文件后缀
switch ($type) {
case 'pdf':
if(file_exists($dir.$filename)){
//打开文件,获得句柄
$file = fopen($dir . $filename,"r");
header('Content-Type: application/force-download');
//返回的文件类型
Header("Content-type:application/pdf");
//按照字节大小返回
Header("Accept-Ranges: bytes");
//返回文件的大小
Header("Accept-Length: ".filesize($dir . $filename));
//这里对客户端的弹出对话框,对应的文件名
Header("Content-Disposition: attachment; filename=" .$filename);
//修改之前,一次性将数据传输给客户端
echo fread($file, filesize($dir.$filename));
//修改之后,一次只传输1024个字节的数据给客户端
//向客户端回送数据
$buffer=1024;
//判断文件是否读完
while (!feof($file)) {
//将文件读入内存
$file_data=fread($file,$buffer);
//每次向客户端回送1024个字节的数据
echo $file_data;
}
//关闭文件句柄
fclose($file);
}else{
echo "<script>alert('文件不存在')</script>";
echo "<script>window.location='doc.html'</script>";
}
break;
case 'doc':
if(file_exists($dir.$filename)){
$file = fopen($dir . $filename,"r"); // 打开文件 // 输入文件标签
header('Content-Type: application/force-download');
header('Content-Type:application/msword');
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($dir . $filename));
Header("Content-Disposition: attachment; filename=" .$filename); // 输出文件内容
echo fread($file, filesize($dir.$filename));
$buffer=1024;
while (!feof($file)) {
$file_data=fread($file,$buffer);
echo $file_data;
}
fclose($file);
}else{
echo "<script>alert('文件不存在')</script>";
echo "<script>window.location='doc.html'</script>";
}
break;
case 'docx':
if(file_exists($dir.$filename)){
$file = fopen($dir . $filename,"r"); // 打开文件 // 输入文件标签
header('Content-Type: application/force-download');
header('Content-Type:application/vnd.openxmlformats');
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($dir . $filename));
Header("Content-Disposition: attachment; filename=" .$filename); // 输出文件内容
echo fread($file, filesize($dir.$filename));
$buffer=1024;
while (!feof($file)) {
$file_data=fread($file,$buffer);
echo $file_data;
}
fclose($file);
}else{
echo "<script>alert('文件不存在')</script>";
echo "<script>window.location='doc.html'</script>";
}
break;
case 'ppt':
if(file_exists($dir.$filename)){
$file = fopen($dir . $filename,"r"); // 打开文件 // 输入文件标签
header('Content-Type: application/force-download');
header('Content-Type:application/vnd.ms-powerpoint');
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($dir . $filename));
Header("Content-Disposition: attachment; filename=" .$filename); // 输出文件内容
echo fread($file, filesize($dir.$filename));
$buffer=1024;
while (!feof($file)) {
$file_data=fread($file,$buffer);
echo $file_data;
}
fclose($file);
}else{
echo "<script>alert('文件不存在')</script>";
echo "<script>window.location='doc.html'</script>";
}
break;
}
break;
}
三、header设置
$size = filesize($file_path);
Header("Content-type: audio/wav");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".$size);
Header("Content-Disposition: attachment; filename=" .$filename);
readfile($file_path);
四、删除文件
$dh = opendir($dir);
while (($file = readdir($dh)) !== false){
if($file != '.' && $file != '..'){
if($file == $filename){
unlink($dir.$filename);
}
}
}
closedir($dh);