文件的上传与下载是项目中必不可少的模块,也是php最基础的模块之一,大多数php框架中都封装了关于上传和下载的功能,不过对于原生的上传下载还是需要了解一下的。基本思路是通过form表单post方式实现文件上传,通过流输出的方式实现文件下载。以下分别讲述实现的具体细节。

一、文件的上传

主要用到一个超全局数组:$_FILES,是一个包含五个上传信息的二维数组,如下所示

array(2) {
["pic"]=>
array(5) {
["name"]=>
string(40) "0ec5972b-ec68-4c49-8504-03a9a3b470c8.jpg"
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(2)
["size"]=>
int(0)
}
["pic1"]=>
array(5) {
["name"]=>
string(36) "2F5FB17A626C79D7AB7C362E840C8315.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(27) "C:\Windows\Temp\php208E.tmp"
["error"]=>
int(0)
["size"]=>
int(48516)
}
} 其中

1. name:上传文件名
2. type:文件类型 常见的有图片("image/jpeg","image/jeg","image/png","image/gif")
3. tmp_name: 上传成功后的临时文件名
4. error: 和该文件上传相关的错误代码
5. size:上传文件的大小

其中pic、pic1是上传文件的表单项名,可以任意指定

一般是在一个index.php文件中浏览上传后的图片,并提供上传表单 注意:上传表单中发送方式必须是post,类型enctype:multipart/form-data

实现步骤一般有六步:1.获取上传文件信息 2.过滤上传文件的错误号 3.本次上传文件大小的过滤(自己选择)4.过滤文件类型5.上传后的文件名定义(随机获取一个文件名并且保持后缀名不变)6.执行文件上传 代码在此就不贴出了。

二、文件的下载

文件的下载一般有两种方式:1.通过超链接实现。地址为文件的地址 ,适用于浏览器解析不了的文件。像压缩文件、脚本文件等。假如文件是图片或者txt文档,就会直接在浏览器中打开,一般不建议用这种方式实现下载功能。

2.通过流输出,php使用header()函数发送网页的头部信息给浏览器,该函数接收一个头信息的字符串作为参数。文件下载需要发送的头信息包括以下三部分,通过调用三次header()函数完成。本文通过图片下载为例讲述实现过程。主要步骤有:1.获取要下载的文件名(加上路径);2.重设响应类型;3.执行下载的文件名;4.指定文件的大小;5.响应内容。代码如下:download.php

<?php

//1.获取要下载的文件名(加上路径)
$file="./uploads/".$_GET["name"];//通过设置超链接download.php?name={$f},用$_GET获取地址栏参数name获取文件名
//2.重设响应类型
//echo '<pre>';var_dump(getimagesize($file));exit;
$info=getimagesize($file);
header("Content-type:".$info["mime"]);
//3.执行下载的文件名
header("Content-Disposition:attachment;filename=".$_GET["name"]);
//4.指定文件的大小
header("Content-Length:".filesize($file));
//5.响应内容
readfile($file);

php实现文件上传下载功能小结的更多相关文章

  1. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  2. JavaWeb实现文件上传下载功能实例解析 (好用)

    转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ...

  3. WEB文件上传下载功能

    WEB文件上传下载在日常工作中经常用到的功能 这里用到JS库 http://files.cnblogs.com/meilibao/ajaxupload.3.5.js 上传代码段(HTML) <% ...

  4. Struts2实现文件上传下载功能(批量上传)

    今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...

  5. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现

    ----------------------------------------------------------------------------------------------[版权申明: ...

  6. C# 文件上传下载功能实现 文件管理引擎开发

    Prepare 本文将使用一个NuGet公开的组件技术来实现一个服务器端的文件管理引擎,提供了一些简单的API,来方便的实现文件引擎来对您自己的软件系统的文件进行管理. 在Visual Studio ...

  7. javaweb项目中的文件上传下载功能的实现

    框架是基于spring+myBatis的. 前台页面的部分代码: <form action="${ctx}/file/upLoadFile.do"method="p ...

  8. FasfDFS整合Java实现文件上传下载功能实例详解

    https://www.jb51.net/article/120675.htm 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java ...

  9. 利用Django REST framework快速实现文件上传下载功能

    安装包 pip install Pillow 设置 首先在settings.py中定义MEDIA_ROOT与MEDIA_URL.例如: MEDIA_ROOT = os.path.join(BASE_D ...

随机推荐

  1. linux中级-JAVA企业级应用TOMCAT实战

    1. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共 ...

  2. android中通话录音

    file = new File(Environment.getExternalStorageDirectory(), this.incomeNumber + System.currentTimeMil ...

  3. jQ1.5源码注释以及解读RE

    jQ作为javascript的库( ▼-▼ ), 尽善尽美, 代码优美,  值得学习.  这一周平常上班没啥事也看jQ1.5的代码, 今天周六差不多看完了(Sizzle部分还没看), 重新看了一下, ...

  4. 最简实例说明wait、notify、notifyAll的使用方法

    wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. 这三个方法最终调用的都是jvm级的native方法.随着jvm运行平台的不同可能有些 ...

  5. 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)

    Less Time, More profit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  6. hibernate查询返回一个list ,Date类型追加数据

    public Pagination getLookPage(BeanPatrolScheduling beanPatrolScheduling, int pageNo, int pageSize) { ...

  7. Leetcode 77, Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  8. spring的自动装配基础

    当开始看别人的代码使用注解的时候,以为照着别人的代码写,也写一个注释就能实现这样的功能,但是,现在开始考虑自动装配时怎样实现的. 首先,如果如果知道如何手动在xml配置中"装配bean&qu ...

  9. 自动存储管理 ASM (转)

    文章转自:http://www.itpub.net/thread-1342473-1-1.html 自动存储管理 (ASM) ASM 是 Oracle 数据库 10g 中一个非常出色的新特性,它以平台 ...

  10. hdu 5269 trie树

    现场想到了lowbit(X xor Y)=X和Y从右向左数,对应相同的数的个数+1...然而并没有想到接下来用trie树 然后就想排个序试试...然后就整个人都不好了啊摔 sol:用trie,一边in ...