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

     文件上传和下载

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

一、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. Linux screen 常用命令

    想必,只要接触过Linux一段时间的人,一定知道screen这个神奇的工具了,它主要有如下些优势: 1. 后台运行:当你在ssh terminal执行shell时,如果网络这时断开,你的程序会怎样?T ...

  2. SQL基本编程,分支语句,循环语句,存储过程,触发器

    基本编程: 定义变量 declare @变量名 数据类型 赋值 set @变量名 = 值 select @变量名 = 值 取值打印 select @变量名 print @变量名 映射到结果集 打印到消 ...

  3. USB PE

    To put WinPE on a USB Stick, you must first make it bootable. Warning: This will destroy all the dat ...

  4. yii2.0下拉列表的使用

    第一种方法:ActiveForm 类的 dropDownList 方法(优点,默认使用yii的样式) 1.在控制器的方法里面 ,我们需要拿到数据,一定是 findAll() 或者是 all() 方法的 ...

  5. 关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException

    数组只能存错一种相同的数据类型,集合只能存储引用数据类型(用泛型),集合的底层就是一个可变的数组. 数组的冒泡排序: public static void arrayMaxPaiXu(int[] ar ...

  6. java学习(二)多态中成员变量详解

    今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...

  7. Onsen UI 前端框架(二)

    上一章介绍了OnsenUI一些入门的知识以及它和AngularJS配合的初始化方法.这一章,咱们继续对这块内容进行介绍,对OnsenUI提供的组件进行更进一步的学习. 咱们从手机应用布局的最上面开始. ...

  8. Ef+T4模板实现代码快速生成器

    转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 效果如图,demo(点击demo可下载案例) 项目结构如图 T4BLL添加BLL.t ...

  9. [Oracle]同义词(synonym)

    (一)同义词的概念 同义词是数据库中表.视图.索引或其他模式对象的别名,与视图相似,同义词不占用实际的存储空间,在数据字典中只存同义词的定义. 在开发数据库时,应尽量避免直接引用表.视图或其他数据库对 ...

  10. js移动端横竖屏检测

    方法一:用resize事件来判断,利用屏幕的宽高比,来判断横竖屏 (兼容性较好) (function () { var updateOrientation = function () { var or ...