首页 > 编程语言 >php实现文件上传下载功能

php实现文件上传下载功能

时间:2023-09-10 17:33:06浏览次数:58  
标签:文件 name 文件名 上传下载 php 上传 下载

文件的上传与下载是项目中必不可少的模块,也是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,类型enctypemultipart/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);

 

 

参考文章:http://blog.ncmem.com/wordpress/2023/09/10/php%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd/

欢迎入群一起讨论

 

 

标签:文件,name,文件名,上传下载,php,上传,下载
From: https://www.cnblogs.com/songsu/p/17691540.html

相关文章

  • ASP.NET实现文件上传和下载
     ######本文的开发配置 ######.NET版本:.NETFramework4.0开发环境:MicrosoftVisualStudio2013浏览器:IE、Chrome、FireFox等都行 1、搭建网站结构建立一个新的目录存放网页文件,用VS2013在这个目录里面建一个网站项目(VS2013怎么新建网站项目?)新建两个目录UploadFile和......
  • Terraform 团队协作以及状态文件 (9)
    Terraform状态文件在默认情况下,Terraform将状态文件terraform.tfstate存储在本地。如果一个人使用Terraform的话是可以的,如果是团队维护的话,就不太合适了。因为团队中的每一个成员都有可能执行Terraform,所以每个人都有可能产生自己的状态文件。如何能够同步状态文件,并且让它......
  • hdfs批量上传下载文件和删除指定目录下文件
    hdfs批量上传下载文件和删除指定目录下文件一、hdfs批量下载文件hdfsdfs-gets3a://bigdata/infra/zeppelin/notebook/二、hdfs批量上传文件hdfsdfs-put./*/bigdata/infr/zeppelin/notebook/三、hdfs删除指定目录hdfsdfs-rm-r/bigdata/infra/zeppelin/notebook/wei.ji10......
  • 代码审计 | ThinkPHP 5.1控制器定义
    什么是控制器?控制器是Web应用程序的关键组件之一,它负责接收来自用户的请求,并根据请求执行相应的操作。在ThinkPHP5.1中,控制器通常存储在application目录下的controller文件夹中。每个控制器都是一个类,通常继承自think\Controller类。创建一个控制器在ThinkPHP5.1中,创建一个控制器......
  • Java项目文件上传和下载
    话不多说,拿到Java项目,跑起来。这是前后端分离的项目,前端比较简单,直接打开html文件。仓库地址:https://gitee.com/hicey/file-manager提供:分片上传、断点续传、秒传功能另外的下载、删除功能开发环境:JDK8,SpringBoot2.x,MySQL5.5,web-uploader秒传上传完成后再次选择这个文件......
  • 不使用vmtools和共享文件夹将虚拟机外文件导入虚拟机内(windows版)
    不使用vmtools和共享文件夹将虚拟机外文件导入虚拟机内(windows版)前言在某种情况下,例如经过一些设置使得虚拟机上不了网,你无法通过网络下载vmtools安装;然后虚拟机ip网段和本机的网段不同,你不能利用共享文件夹;或者要搭建蜜罐虚拟机,要清除虚拟机里的"虚拟机痕迹"。利用U......
  • 浅谈“文件与文件流”的区别
    文件与文件流的区别(自己的话):    在软件开发过程中,我们常常把文件的“读写操作”,与“创造、移动、复制、删除操作”区分开来。其中,文件的“读写操作”是由System.IO命名空间下fileStream类控制的。而文件的“创造、移动、复制、删除操作”是由file类控制的。    当......
  • 使用syncthing共享文件及文件夹的方法
    原文链接:使用syncthing共享文件及文件夹的方法hello,大家好啊,今天给大家介绍一个在统信UOS桌面操作系统上使用的远程共享图形化工具,我们在之前的文章中介绍了使用smb文件夹共享的方式uos桌面操作系统上smb共享无法连接怎么办,今天给大家介绍一个使用syncthing共享文件及文件夹的方法......
  • mybatis核心配置文件以及mapper文件的配置
    config文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>......
  • vscode运行Python调取文件报错 运行调试配置的问题
    报错原因:报错信息提示的是没有那个文件,但是那明明是有文件的,而且在终端运行没问题,这是因为vscode配置的原因,小伙伴按下面的方法解决即可!!!解决办法:"cwd":${fileDirname}把这个加到配置文件里: ......