PHP文件上传及下载源码

  一、文件上传

  前台页面:

<!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);
?>
时间: 2024-10-15 00:40:09

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

Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 原文地址:http://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-multipartconfigelement/ 上一篇:Spring MVC 4 使用常规的fileupload上传文件(带源码) 下一篇:Spring MVC 4 文件下载实例(带源码)

Linux 指令篇:文件上传和下载 lrzsz

[ "lrzsz"一般用于SecureCRT ssh中使用 ] 简介:rz,sz是早期Linux/Unix同Windows进行ZModem文件传输的命令行工具.rz ,sz 是非常古老的zmodem协议使用的上传下载命令,早就被抛弃了的东西,目前的发行版基本都不再预装. 优点:比ftp命令方便,而且服务器不用打开FTP服务. 命令sz:将选定的文件发送(send)到本地机器 命令rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器. lrzsz安装方法: [[e

java里面的文件上传与下载

文件的上传与下载主要用到两种方法:1.方法一:commons-fileupload.jar commons-io.jarapache的commons-fileupload实现文件上传,下载 [upload]package com.handson.bbs.servlet; import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import javax.servlet.Se

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

一.引言 欢迎大家来到和我一起编写Http服务器实现文件的上传和下载,现在我稍微回顾一下之前我说的,第一.二章说明说明了整体的HTTP走向,第三章实现底层的网络编程.接着这一章我想给大家讲的是请求获取,和响应发送的内容.这里主要讲解的响应内容,为什么?因为我们编写的是一个与浏览器交互的HTTP服务器,所以大多数的情况下我们只进行被动的应答. 这就是一种"提问--回答"的问题.其实在讲解这章的时候,我本来准备给大家讲解一下Linux一些信号中断的问题.因为在网络层发送的时候,系统会发送一

Java 文件上传与下载、email

1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data 手动实现文件上传 <body> <form name="frm_test" 

Struts2(二)文件上传和下载

struts2文件上传和下载 1.创建一个index.jsp界面 和success.jsp上传成功界面 index.jsp <%@ taglib prefix="s" uri="/struts-tags" %> <body> <s:form action="files/add" method="post" enctype="multipart/form-data"> &l

FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现,分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 [java] view plaincopy package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.n

Java实现FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.Telnet

java实现文件上传和下载

写在前面 [文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后者主要通过编程语言开发的app作为客户端来访问服务端,一般采用七层协议中的[传输层tcp]进行数据传输. 文章主要完成简单java web涉及的文件上传和下载功能. 正文 1. java原生servlet实现: pom.xml配置: <dependency> <groupId>