一、文件上传

  前台页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<div>
<form method="post" action="upload.php" enctype="multipart/form-data" >
用户名<input type="text" name="username"></input>
<br>
文件简单介绍<br><textarea name="fileintro" rows="8" cols="50"></textarea>
<br>选择要上传的文件<br><input type="file" name="myfile"></input><br>
<input type="submit" value="上传文件"></input>
</form>
</div>
</body>
</html>

  后台处理:

<?php
//接收提交页面传送的相关信息
$name = $_POST['username'];
$intro = $_POST['fileintro'];
//$_FILES中存放着文件的相关信息
// echo "<pre>";
// print_r($_FILES);
// echo "</pre>"; //可以在这里对文件大小进行限制
/*$filesize = $_FILES['myfile']['size'];
if($filesize>2*1024*1024){
echo "文件过大,不能上传";
exit();
}*/ //可以对文件类型进行限制
/*$filetype = $_FILES['myfile']['type'];
if($filetype!='image/jpg'&&$filetype!='application/pdf'){
echo "文件类型只能是jpg和pdf";
exit();
}*/ if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {
//把文件转存到你希望存放的目录
$uploaded = $_FILES['myfile']['tmp_name']; //每个用户动态创建一个文件夹
$userpath = $_SERVER['DOCUMENT_ROOT']."/up/".$name;
//判断该用户是否已经有文件夹
if(!file_exists($userpath)){
mkdir($userpath);
} //防止同一用户上传同名文件,可在文件中添加时间戳。
//$moveto = $userpath."/".time().$_FILES['myfile']['name']; //或者对文件名进行修改,但是需要使用字符串处理截得文件后缀名
$truename = $_FILES['myfile']['name'];
$moveto = $userpath."/".time().substr($truename,strrpos($truename,".")); if(move_uploaded_file($uploaded,iconv("utf-8", "gb2312", $moveto))){
echo "上传文件".$_FILES['myfile']['name']."成功";
}else{
echo "上传文件".$_FILES['myfile']['name']."失败";
}
}else{
echo "上传文件".$FILES['myfile']['name']."失败";
}
?>

  二、文件下载:

  单文件下载:

 <?php
function down_file($file_name,$file_path){
//$file_name = iconv("uft-8","gb2312",$file_name); //如果文件名是中文,需要对中文名称转码gb2312
//要下载的文件读取到服务器的内存中
//服务器返回文件数据给浏览器
//浏览器将文件写入用户指定的位置
//1.判断文件是否存在
if(!file_exists($file_name)){
echo "111";
return ;
}
$fp = fopen($file_name,"r");
$file_size = filesize($file_name);
//获取文件大小
//可通过file_size限制浏览器下载文件大小。
//返回的文件
header("Content-type:application/octet-stream");
//按字节大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//客户端弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
$buffer = 1024;
//定义缓冲区
//为了下载的安全,最好使用文件字节读取计数器
$file_count = 0;
//feof用于判断文件是否读取到文档尾
while(!feof($fp) && ($file_size-$file_count>0)){
$file_data = fread($fp,$buffer);
//统计读了多少个字节
$file_count+$buffer;
echo $file_data;
//把部分数据会送给浏览器
}
fclose($fp);
//关闭文件
}
?>

  多个文件下载:

  DownList.php:

<a href="downprocess.php?filename=1.jpg">down</a><img src="1.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=2.jpg">down</a><img src="2.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=3.jpg">down</a><img src="3.jpg" width="50px" height="50px"><br><br>
<a href="downprocess.php?filename=4.jpg">down</a><img src="4.jpg" width="50px" height="50px"><br><br>

  downprocess.php:

<?php
$filename = $_REQUEST['filename'];
function down_file($file_name){ if(!file_exists($file_name)){
echo "111";
return ;
}
$fp = fopen($file_name,"r");
$file_size = filesize($file_name);
header("Content-type:application/octet-stream");
//按字节大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//客户端弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
$buffer = 1024;
//定义缓冲区
$file_count = 0;
//feof用于判断文件是否读取到文档尾
while(!feof($fp) && ($file_size-$file_count>0)){
$file_data = fread($fp,$buffer);
//统计读了多少个字节
$file_count+$buffer;
echo $file_data;
//把部分数据会送给浏览器
}
fclose($fp);
}
down_file($filename);
?>

PHP文件上传及下载源码的更多相关文章

  1. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  2. 19、文件上传与下载/JavaMail邮件开发

    回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...

  3. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...

  4. Java 文件上传与下载、email

    1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> ...

  5. Http服务器实现文件上传与下载(四)

    一.引言 欢迎大家来到和我一起编写Http服务器实现文件的上传和下载,现在我稍微回顾一下之前我说的,第一.二章说明说明了整体的HTTP走向,第三章实现底层的网络编程.接着这一章我想给大家讲的是请求获取 ...

  6. koa2基于stream(流)进行文件上传和下载

    阅读目录 一:上传文件(包括单个文件或多个文件上传) 二:下载文件 回到顶部 一:上传文件(包括单个文件或多个文件上传) 在之前一篇文章,我们了解到nodejs中的流的概念,也了解到了使用流的优点,具 ...

  7. 七、springBoot 简单优雅是实现文件上传和下载

    前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...

  8. javaWeb学习总结——文件上传、下载

    目录 1.文件上传环境搭建 2.文件上传代码实现 3.关于下载 @ 嘿,熊dei,你不得不知道在Web开发中,文件上传和下载功能是非常常用的功能,关于文件上传,浏览器上传[文件以流的形式传输]--&g ...

  9. Java实现FTP文件上传与下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...

随机推荐

  1. 年度编程语言最佳候选人:Kotlin vs. C

    转瞬之间,今年已进入为期不足一个月的倒计时模式.在编程语言界,谁将问鼎 2017 年度编程语言?诸多开发者众说纷纭,有人说是最近风头正盛且被纳入中国高考科目的 Python.有人认为还是老牌常青藤 J ...

  2. bzoj1485: [HNOI2009]有趣的数列(Catalan数)

    一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...

  3. Redis常用命令速查 <第二篇>

    一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RES ...

  4. Spring MVC 向页面传值-Map、Model和ModelMap

    原文链接:https://www.cnblogs.com/caoyc/p/5635878.html Spring MVC 向页面传值-Map.Model和ModelMap 除了使用ModelAndVi ...

  5. 位运算符和unity Layers

    按位运算符:与(&).非(~).或(|).异或(^).<<(左移).>>(右移).位运算符主要用来对二进制位进行操作. 逻辑运算符:&&.||.!.逻辑 ...

  6. JavaScript中作用域回顾(避免使用全局变量)(瀑布流的实现)(scroll事件)以及Django自定义模板函数回顾

    页面显示照片样式为瀑布流: 上面的div个数可以按照自己安排进行划分.img的分布可以使用模板标签以及自定义模板函数进行排布: 自定义模板函数实现可以看,最后几列:python---django中模板 ...

  7. [原]JUnit 自定义扩展思路

    1. 理解Annotation,http://www.cnblogs.com/mandroid/archive/2011/07/18/2109829.html 2. JUNIT整体执行过程分析,htt ...

  8. Tju_Oj_3988Password

    这个题是给树的前序和中序,输出后序. 做法是根据前序找根,根据根在中序中找中序的左右子树,根据左右子树长度找前序的左右子树,依此递归. 做过之后感觉还是比较基础的,废话不多说,上题上代码. Bob w ...

  9. PB程序调用C++ COM生成对象发回-2问题

    C++写的COM组件用于读CPU卡,在C#中正常能够引用使用,但是在PB中却是返回-2,不识别类名,代码如下: OleObject ole_AddComole_AddCom = Create OLEO ...

  10. 使用 jquery-autocomplete插件 完成文本框输入自动填充联想效果 解决兼容IE输入中文问题

    项目中有时会用到ajax自动补全查询,就像Google的搜索框中那样,输入汉字或者字母的首个字母,则包含这个汉字或者字母的相关条目会显示出来供用户选择,该插件就是实现这样的功能的.autocomple ...