文件下载部分

从 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. ZookeeperNet太难用,写了个RetryHelper来进行配套使用

    普通的zk用法,如下写法: zk.Exists("/aaa", true); zk.Create(...); 但是由于这些API会抛Zookeeper的Exception,比如Co ...

  2. JS 获取自定义标签

    <abc-aaa xwe='sdf'>AAAAAAAAAAAAAAAAAAAAAA</abc-aaa> alert($("abc-aaa").attr(&q ...

  3. Xcode7 使用NSURLSession发送HTTP请求的问题

    报错信息: Application Transport Security has blocked a cleartext HTTP (http://) resource load since it i ...

  4. transmission简单使用

    1.安装transmission-daemon sudo apt-get install transmission-daemon 2.设置用户名和密码并打开远程连接 a). 打开文件vim /var/ ...

  5. eclipse android logcat 只显示自己应用程序信息的设置方法

    1 elcipse 中往往会在logcat中显示 all message ,而这里面的信息太多,根本没有办法进行区分.如图: 2 我们想显示自己项目的 logcat .下面开始设置. 3 首先点击上面 ...

  6. web项目中加入struts2、spring的支持,并整合两者

    Web项目中加入struts2 的支持 在lib下加入strut2的jar包 2. 在web.xml中添加配置 <filter> <filter-name>struts2< ...

  7. .NET Framework 类库

    .NET Framework 类库 MSDN == V2.0 == .NET Framework 类库是一个由 Microsoft .NET Framework SDK 中包含的类.接口和值类型组成的 ...

  8. English Metric Units and Open XML

    English Metric Units and Open XML 在Open XML里使用了English Metric Units(EMUs)来作为度量单位.比如 public class Ext ...

  9. iOS开发备忘录:实现多StoryBoard之间跳转

    iOS项目中可以将同一业务流程的页面归置到一个StoryBoard中,项目中必然会包含多个StroryBoard,可以利用跳转,实现项目的不同业务流程页面间的跳转切换. 实现思路: 1,项目(Proj ...

  10. is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of 40 GB virtual memory used

    昨天使用hadoop跑五一的数据,发现报错: Container [pid=,containerID=container_1453101066555_4130018_01_000067] GB phy ...