文件下载部分

从 down 目录下下载,先获取目录下所有文件,再为每个文件添加download 信息,主要是文件名,后缀的关系。

分两部分,down_1.php 部分初始化,点击download 则跳转 down_2.php 处理传送过来的数据(文件名id).

主要源码如下(主要使用了简单的php 与 “table" 处理:

部分效果显示:

down_1.php :

<?php

// 查找所有文件信息........
class document{
public $file_array = array();
public $foder_array = array();
public $all_array = array();
// 查找目录下所有文件
function fetch($dir){
$H = opendir($dir);
while(false !==($_file=readdir($H))){
if(is_dir($dir."/".$_file)&&$_file !="."&&$_file !=".."&&$_file !="Thumbs.db"){
array_push($this -> folder_array,$dir."/".$_file);
$this ->fetch($dir."/".$_file);
}
else if(is_file($dir."/".$_file)&&$_file !="."&&$_file !=".."&&$_file !="Thumbs.db"){
array_push($this -> file_array,$dir."/".$_file);
}
}
closedir($H);
$this->all_array['foder'] = $this -> foder_array;
$this ->all_array['file'] = $this ->file_array;
return $this ->all_array;
}
} // 实例化,从 down 文件夹中找文件
$d = new document();
$f = $d -> fetch("../down");
$ff = $f['file'];
$sum = count($ff);
echo "<table align=center border=1 cellpadding=5>";
echo "<tr><td align=center>file_name</td><td>download</td></tr>";
for($i = 0;$i<$sum;$i++)
{
echo "<tr><td>$ff[$i]</td><td><a href=index.php?id=$ff[$i]>download</a></td></tr>";
}
echo "</table>"; ?>

down_2.php:

<?php 

/*  下载文件  */
// 设置文件查找的限制--条件
class dl{
var $language = "CN";
var $allow = array(".gif",".jpg",".txt",".exe",".php","png");
var $serverPath = "./";
//设置出错语言及出错信息
var $message_CN = array(
"0" => "未找到文件",
"1" => "不允许下载此类型文件"
);
var $message_EN = array(
"0" => "this file does not exists",
"1" => "can't download this kind of file"
); // 构造函数建值
function __construct($serverPath){
$this ->serverPath = $serverPath;
if($this ->language == "CN")
$this ->message = $this->message_CN;
else
$this ->message = $this ->message_EN;
} // 由后缀查找,并设置错误返回方式
function get_ext($file){
$file_ext = substr($file,-4);
if(!file_exists($this->serverPath."/".$file)){
$this ->error("0");
}
if(!in_array($file_ext,$this->allow)){
$this ->error("1");
}
} function error($i){
die ($this->message[$i]);
} // 下载文件开始, 需要设置多个 Content-Type
function download($filename,$mimeType = "application/octet-stream"){
$this ->get_ext($filename);
$fullname = $this->serverPath."/".$filename;
header("Content-Type : { $mimeType }");
$filename = "".htmlspecialchars($filename)."";
$filesize = filesize($fullname);
header("Content-Disposition : attachment; filename = {$filename} ; charset = gb2312");
header("Content-length : {$filesize}");
readfile($fullname);
exit;
}
} // 实例化..
$d = new dl("../down");
$ss = $_GET['id'];
$pieces = explode("/",$ss);
$d ->download($pieces[2]); ?>

上传文件部分:

也是通过解析文件名以及后缀,但外加了一个随机构造文件名的方法,以防文件名重复。上传至up 目录下。

提供了文件浏览功能,其实就是< img src="uploadfile"/> 就解析出来了。

部分效果图:

up_1.php 部分:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<script language="javascript" type="text/javascript"> </script>
</head>
<body>
<center><h3> Upload files</h3></center>;
<form name=from1 method="post" action="edit.php" enctype="multipart/form-data">
<table border=1><tr>
<td><input type="file" name="file" maxlength="40" value="浏览"/></td>
<td><input type="submit" name="submit" value="上传"/></td>
</tr></table>
</form> </body>
</html>

up_2.php 部分:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<script language="javascript" type="text/javascript"> </script>
</head>
<?php
#============================================== /* 上传文件 */ // 先设置上传目录 及支持类型文件
$uploaddir = "../up";
$type = array("jpg","gif","txt","php","jpeg"); // 获取文件后缀
function fileext($filename){
return substr(strchr($filename,"."),1);
}
// 为不使文件名重复,使用随机数生成新文件
function random($length){
$hash = "CR-";
$chars = "ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwxyz0123456789";
$max = strlen($chars) - 1;
mt_srand(((double)(microtime() * 1000000)));
for($i = 0; $i<$max; $i++)
$hash .= $chars[mt_rand(0,$max)]; return $hash;
} // 文件上传 处理 $a = strtolower(fileext($_FILES['file']['name']));
if( !in_array($a,$type))
{
$text = implode(",",$type);
echo "Sorry, you can just upload these kinds of file :".$text."<br/>";
}
else
{
$filename = explode(".",$_FILES['file']['name']);
do{
$filename[0] = random(10);
$name = implode(".",$filename);
$uploadfile = $uploaddir.$name;
}while(file_exists($uploadfile));
if( move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile))
if($_FILES['file']['size'] > 0)
{
echo "<center> File upload success ! 预览 :<img src='$uploadfile'/> </center>";
echo "<center> <a href=delete.php>继续上传</a></center>";
}
else echo "Failed in uploading !";
} ?> </html>

文件的上传下载涉及了很多格式,有些类型的文件需要特殊处理,===================================

PHP 简单处理--文件下载--文件上传的更多相关文章

  1. extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法

    在extjs的学习过程中,有遇到过有关多文件上传的问题,但是网上的大多数都是专门的去实现多文件上传而去做的组件之类的,没有特别简单的方式,于是小白便做了下面的内容,只是通过动态的去添加extjs的自带 ...

  2. 全网最简单的大文件上传与下载代码实现(React+Go)

    前言 前段时间我需要实现大文件上传的需求,在网上查找了很多资料,并且也发现已经有很多优秀的博客讲了大文件上传下载这个功能. 我的项目是个比较简单的项目,并没有采用特别复杂的实现方式,所以我这篇文章的目 ...

  3. JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传

    异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...

  4. Thinkphp3.2简单解决多文件上传只上传一张的问题

    html简单页面: index.html代码: <form action="{:U('index/upload')}" method="post" enc ...

  5. javaweb简单的实现文件上传

    java代码: // @RequestMapping(value = "/upload.do", method = RequestMethod.POST) @RequestMapp ...

  6. 利用Bootstrap简单实现一个文件上传进度条

    © 版权声明:本文为博主原创文章,转载请注明出处 说明: 1. 使用commons-fileupload.jar实现文件上传及进度监听 2. 使用bootstrap的进度条进行页面显示 3. 因为进度 ...

  7. xshell简单配置(文件上传和下载)

    1.安装lrzsz 1.1直接安装#yum install lrzsz 1.2sudo命令安装#sudo yum install lrzsz -y检查是否安装成功.#rpm -qa |grep lrz ...

  8. 一个简单的excel文件上传到数据库方法

    因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...

  9. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

随机推荐

  1. GOOGLE不能访问的解决方法

    1VPN gate 2自 由 门 3修改Windows\System32\drivers\etc hosts (复制https://github.com/txthinking/google-hosts ...

  2. java 反射: 当Timestamp类型的属性值为null时,设置默认值

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  3. python数据结构之栈、队列的实现

    这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...

  4. 动态生成Table内文字换行。

    后台动态生成table,并把td内的文字进行换行. 前台: <body style="width:100%;height:540px;margin-left:0px;margin-to ...

  5. [转] The program can't start because api-ms-win-crt-runtime-l1-1-0.dll is missing

    https://www.smartftp.com/support/kb/the-program-cant-start-because-api-ms-win-crt-runtime-l1-1-0dll- ...

  6. BCB6 重装后的项目编译莫名问题

    我很少用 bcb ,重装 bcb6 后原来的项目居然不能编译成功了,看了一下是控件的问题,但很多控件实际上并不关联的,而 bcb 坚持要你"拥有"当时的控件环境,折腾很久实在是没发 ...

  7. C#记录对象的变化

    经常,我们会遇到一个场景,在保存对象到数据库之前,对比内存对象和数据库值的差异. 下面我写了一种实现,为保存定义一个事件,然后自动找出对象之间的差异,请注意,并没有通过反射的方式去获取每个属性及其值. ...

  8. openssl 学习之从证书中提取RSA公钥N 和 E

    原文链接: http://blog.csdn.net/kkxgx/article/details/19850509 通常数字证书包含很多信息,其中N和E值即我们称为的公钥.如何从PEM 或者DER格式 ...

  9. java-cef系列视频第二集:搭建开发环境

    上一集我们介绍了如何从官方代码编译java-cef. 本视频介绍了如何使用eclipse搭建java-cef二次开发环境. 下一集我们将给java-cef添加flash支持. 本作品采用知识共享署名- ...

  10. Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

    1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完整”. 点击“Rem ...