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

     文件上传和下载

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

一、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. Struts2基础学习(六)—文件的上传和下载

    一.文件的上传 1.单个文件上传      Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...

  2. 【JavaWeb学习】文件的上传和下载

    一.文件上传 1.1.概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中 如何在web页面中添加上传输入 ...

  3. SpringMVC 学习笔记(文件的上传和下载)

    在web项目中会遇到的问题:文件上传 文件上传在前端页面的设置:form表单 设置 input 类型 文件上传的请求方式要使用post,要将enctype设置为multipart/form-data ...

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

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

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

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

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

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

  7. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  8. Javaweb之文件的上传与下载

    Javaweb之文件的上传与下载 一.基于表单的文件上传 如果在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可 ...

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

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

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

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

随机推荐

  1. JSP +++SERVIET总复习

    一. JSP基础概念 软件架构 B/S架构:Browser/Server,浏览器-服务器 最大的优点就是:一次部署,处处访问. C/S架构:Client/Server,客户端-服务器 功能.事件丰富, ...

  2. 476. Number Complement

    题目 Given a positive integer, output its complement number. The complement strategy is to flip the bi ...

  3. hdoj1072 Nightmare bfs

    题意:在一个地图里逃亡,2是起点,3是终点,1是路,0是墙,逃亡者携带一个炸弹,6分钟就会炸,要在6分钟前到达4可以重制时间,问是否能逃亡,若能则输出最小值 我的思路:bfs在5步内是否存在3,存在则 ...

  4. webpack 安装流程

    我最近想看看wabpack,然后就面临着安装的问题,说实话,我一点也不懂cmd,怎么还需要用cmd安装呢.其实看教程上说可以在npm上安装,但是我打开npm总是出现闪退,所以我就选择了cmd 安装的过 ...

  5. CentOS7 更换yum源

    yum源调整为163wget http://mirrors.163.com/.help/CentOS7-Base-163.repo[root@admin yum.repos.d]# mv CentOS ...

  6. HTTP协议(三)

    一.首先我们画一个图来看一下HTTP协议: 难道方法只有POST GET吗?NO,还有一些少用的方法. 二.请求方法有哪些? GET POST HEADER PUT TRACE DELETE OPTI ...

  7. 免费SSL证书PK付费SSL证书 花落谁家

    3月17日和18日,Google Chrome 57.0.2987.110与Mozilla Firefox 52.0.1分别上线,而这两款浏览器都出现了一个共同点:打压HTTP协议.在Firefox ...

  8. vue-router2.0动态路由获取参数

    一下demo演示2.0中的vue-router是如何获取到不同参数的,并在地址栏中匹配不同的信息 <!DOCTYPE html> <html lang="en"& ...

  9. POJ1275出纳员的雇佣【差分约束】

    出纳员的雇佣 Tehran的一家每天24小时营业的超市,需要一批出纳员来满足它的需要.超市经理雇佣你来帮他解决问题:超市在每天的不同时段需要不同数目的出纳员(例如:午夜时只需一小批,而下午则需要很多) ...

  10. C#研究OpenXML之路(1-新建工作簿文件)

    一.写在开头 一直想沉下心来研究研究OpenXML编程,可是由于公司编程项目一笔接一笔,很难静下来,所以一直是采用的COM操作Excel.现在终于得闲,特将心得历程记录下来. 今天的第一个实例代码是来 ...