=====================

     文件上传和下载

=====================

一、php.ini的配置信息

  file_uploads = On /Off    是否允许文件上传
    upload_max_filesize=2M 上传的文件的最大大小
    post_max_size = 8M       POST数据所允许的最大大小
    upload_tmp_dir             上传文件放置的临时目录

二、客户端上传设置

1、 表单必须是POST提交
    2、 上传的类型:enctype="multipart/form-data"
    3、上传使用的表单项
        <input type="file" name=".." >
    4、(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
        <input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
        注意:此字段必须在文件输入字段之前(常放在form标签后面)

<html>
<head><title>文件上传</title></head>
<body>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='1000000'>
选择文件:<input type='file' name='myfile'>
<input type='submit' value='上传文件'>
</form>
</body>
</html>

三、在服务器端通过PHP处理上传

1、 使用$_FILES全局数组来接收上传信息
        在每个上传的文件里,$_FILES中都会有5个属性:
            error:上传的错误号:0--4
                0:表示没有发生任何错误。
                1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
                2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
                3:表示文件只被部分上传。
                4:表示没有上传任何文件。
                6:找不到临时文件夹
                7:文件写入失败
            name:上传的文件名
            size:文件的大小
            type:文件类型
            tmp_name: 临时文件

2、判断是否为上传文件    is_uploaded_file()

 <?php
//判断文件是否可以上传到服务器
//$_FILE['myfile']['error']为0表示上传成功
if($_FILES['myfile']['error'] > 0){
echo '上传错误';
switch ($_FILES['myfile']['error']){
case 1: die('上传文件大小超过PHP配置文件中的约定值:upload_max_filesize');
case 2: die('上传大小超出了表单中的约定值:MAX_FILE_SIZE');
case 3: die('文件只被部分上传');
case 4: die('没有上传任何文件');
default:die('未知错误');
}
}
?>

3、将上传的文件移动到新位置    move_uploaded_file()

 <?php
$path = './uploads'
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
if(!move_uploaded_file($_FILES['myfile']['tmp_name'],$path . '/' . $filename)){
die('不能将文件移动到指定目录');
}
}
?>

  4、判断是否为可以上传的类型

 <?php
//设置允许的上传类型
$allowtype = array('gif','jpg','png');
//拆分数组,并删除后缀名
$cs = array_pop(explode('.',$FILES['myfile']['name']));
//通过判断文件的扩展名来决定是否是允许上传的类型
if(!in_array($cs,$allowtype)){
die("这个后缀名是{$cs},不是允许上传的文件类型");
}
?>

 5、判断允许上传文件大小

 <?php
$size = 100000;
if($FILES['myfile']['size'] > $size){
die('超过了允许{$size}字节大小'):
}
?>

 6、上传后系统定义文件名

 <?php
//为了系统安全,也为了同名文件不会被覆盖,上传后将文件名使用系统定义
$cs = array_pop(explode('.',$FILES['myfile']['name']));
$filename = date('YmdHis').rand(100,999) . '.' . $cs;
}
?>

四、多个文件上传

只要在客户端多提供几个类型为file的输入表单,并设置不同的name属性值

 <html>
<head><title>文件上传</title></head>
<body>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='1000000'>
选择文件1:<input type='file' name='myfile[]'><br>
选择文件2:<input type='file' name='myfile[]'><br>
选择文件3:<input type='file' name='myfile[]'><br>
<input type='submit' value='上传文件'>
</form>
</body>
</html>

五、文件下载

 <?php
header("Content-Type:类型"); //指定下载的文件类型
header("Content-Disposition:attachment;filename=文件名"); //指定下载的文件描述
header("Content-Length:文件大小"); //指定下载的文件大小
readfile("./uploads/".$picname); //读取并输出图片内容
?>

六、思维导图

【代码总结】PHP文件的上传和下载的更多相关文章

  1. SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...

  2. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  3. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  4. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  5. Apache FtpServer 实现文件的上传和下载

    1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...

  6. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  7. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  8. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  9. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  10. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

随机推荐

  1. 利用数据库管理工具(Navicat)导出数据到Excel表中

    如果只是想把数据库表中数据简单导出来,可以利用数据库管理工具中的工具 1.先查询 2.在查询出结果中全选 3.导出向导 4.选择Excel 5.选择导出地址并命名

  2. ES6 Set和Map的那点事

    Set  1.Set特点 类数组 新增数据结构 是构造函数 成员值唯一  注重独一无二的特征 2.Set实例的常用方法 console.log('------------Set操作方法-------- ...

  3. python的MySQLdb库基本使用介绍

    MySQLdb库 import MySQLdb 简介 提供mysql的基本操作(包括建表,读取表数据,插入数据到表) 数据库操作基本步骤 #!/usr/bin/python # -*- coding: ...

  4. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  5. 解决docker: error pulling image configuration: Get https://registry-1.docker.io/v2/library/mysql/: TLS handshake timeout.

    出现这个问题,一般的原因是无法连接到 docker hub,通过: systemctl stop docker echo "DOCKER_OPTS=\"\$DOCKER_OPTS ...

  6. Javascript自增、自减运算符

    JavaScript自增.自减运算符与表达式语法 var i++; var-- 声明变量 i-- 变量名 ++ -- 自增运算符 JavaScript自增.自减运算符与表达式 JavaScript自增 ...

  7. C++(MFC)踩坑之旅 ------- 新建项目弹出“发生一个或多个错误”

    结束隔离,回公司上班,把在家办公的程序考回公司的电脑,结果出错了,每当我新建项目时,都会弹出"发生一个或多个错误",点确定后回到新建项目的设置上面,折腾了两天时间才解决,以下是我的 ...

  8. yii2.0 验证码

    首先我们在控制器里创建一个actions方法,用于使用yii\captcha\CaptchaAction <?php namespace app\controllers; use YII; us ...

  9. 主机与虚拟机连接,主机能ping通虚拟机虚拟机ping不通主机问题

    事件描述: 从物理主机ping虚拟机时,能正常返回信息.反之,从虚机ping物理主机时返回信息:Destination Host unreachable.   解决方法: 首先,是因为默认创建的虚拟机 ...

  10. java基础数据类型和处理

    import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSON; import java.io.*; import j ...