文件下载部分

从 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. 巧用css border

    上下左右边框交界处呈现平滑的斜线.利用这个特点,通过设置不同的上下左右边框宽度或颜色,可以得到小三角.梯形等. 调整宽度大小可以调节三角形形状. 实现三角形 示例1: #test1{ height:2 ...

  2. 安装python官方的mysql库“mysql-connector-python”

    $ echo https://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-2.1.3.tar.gz >> ...

  3. ECShop商品详细页 实现尺码颜色关联显示库存数量

    效果如下: 要开模板文件 goods.dwt  把选择尺码跟颜色的代码替换成如下,(不同模板代码可能不一样,对照去替换) <!-- {foreach from=$spec.values item ...

  4. 适合wordpress中文网站的seo优化插件 DX-Seo

    DX-Seo是一款强大的多功能wordpress seo插件,主要功能及其使用方法如下 全局开关设置 启动插件后,进入"DX-Seo"栏目,你可以开启或者关闭其中的所有功能. 自动 ...

  5. 云计算相关的一些概念Baas、Saas、Iaas、Paas

    BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务. SaaS(软件即服务:Software as a Service)提供了完整的可直接使用 ...

  6. Kafka - SQL 代码实现

    1.概述 上次给大家分享了关于 Kafka SQL 的实现思路,这次给大家分享如何实现 Kafka SQL.要实现 Kafka SQL,在上一篇<Kafka - SQL 引擎分享>中分享了 ...

  7. Spring3系列5-Bean的基本用法

    Spring3系列5-Bean的基本用法 本篇讲述了Bean的基本配置方法,以及Spring中怎样运用Bean. 主要内容如下: 一.      Spring中Bean的相互引用 二.      Sp ...

  8. android 开发 - 网络图片加载库 Fresco 的使用。

    概述 Fresco 是 facebook 的开源类库,它支持更有效的加载网络图片以及资源图片.它自带三级缓存功能,让图片显示更高效. 介绍 Fresco 是一个强大的图片加载组件. Fresco 中设 ...

  9. IPFS搭建分布式文件系统 - 访问控制

    IPFS 一个内容可寻址.对等的超媒体分发协议. IPFS网络中的节点形成分布式文件系统. 为什么要用IPFS? “IPFS and the Blockchain are a perfect matc ...

  10. ART:Android 摆脱卡顿的希望?

    与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...