33 多文件上传及文件下载

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 路老师分享PHP语言知识,涵盖多文件上传和文件下载功能。多文件上传只需将表单中的文件域名称改为数组形式,文件下载则通过`header()`函数实现强制下载。详细代码示例和操作步骤,助你轻松掌握PHP核心技术。

有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享

路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。

image.gif 编辑


上篇文章简单的了解了介绍实现文件的上传功能及单文件上传案例实现,这次我们继续来了解如何实现多文件上传以及文件的下载功能。

1 多文件上传

PHP支持同时上传多个文件,只需要在表单中对文件上传域使用数组命名即可。单文件上传我们用的是name="upfile",多文件上传只需要把这个改为name="upfile[]"就可以使用了。

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传</title>
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css">
</head>
<body class="col-sm-6 col-sm-offset-1 bg-info">
    <h3 class="col-sm-offset-3">多文件上传</h3>
    <form action="mutiDoAction.php" method="post" enctype="multipart/form-data">
        <div class="form-group">
        <label for="exampleInputFile">请选择您要上传的文件</label>
            <input type="file"  id="exampleInputFile" name="upfile[]">
            <p class="text-danger">格式要求:jpeg/png/gif格式</p>
        </div>
        <div class="form-group">
        <label for="exampleInputFile">请选择您要上传的文件</label>
            <input type="file"  id="exampleInputFile" name="upfile[]">
            <p class="text-danger">格式要求:jpeg/png/gif格式</p>
        </div>
        <div class="form-group">
            <label for="exampleInputFile">请选择您要上传的文件</label>
            <input type="file"  id="exampleInputFile" name="upfile[]">
            <p class="text-danger">格式要求:jpeg/png/gif格式</p>
        </div>
        <button type="submit" class="btn btn-info">提交</button>
    </form>
    
</body>
</html>

image.gif

image.gif 编辑

不过,多文件上传的接收action对应的文件需要进行修改,路老师也不吝啬,直接贴出如下:

//mutiDoAction.php
<?php 
if (!empty($_FILES['upfile'])) {
    //将上传文件名另存为数组
    $file_name = $_FILES['upfile']['name'];
    //将上传的临时文件名存为数组
    $file_tmp_name = $_FILES['upfile']['tmp_name'];
    //循环上传文件
    for ($i=0; $i <count($file_name) ; $i++) { 
        //判断文件名是否为空
        if ($file_name[$i] != '') {
            //设置上传路径
            $uploadPath = 'm_upload';
            if (!file_exists($uploadPath)) {
                $result = mkdir($uploadPath);
            }
            //上传后的文件名要唯一并统一
            $uniName = md5(uniqid(microtime(true), true));
            //获取文件后缀名(文件类型)
            $ext[$i] = strtolower(pathinfo($file_name[$i], PATHINFO_EXTENSION));
            //生成目录
            $destination[$i] = $uploadPath."/".$uniName.'.'.$ext[$i];
            //上传文件
            move_uploaded_file($file_tmp_name[$i], $destination[$i]);
            //输出提示
            echo "文件".$file_name[$i].'上传成功。更名为:'.$uniName.'.'.$ext[$i].'<br>';
        }
    }
}
?>

image.gif

上传成功后的结果如下:

image.gif 编辑

2 文件下载

对于文件下载,通常有两种情况。第一种情况下载浏览器不能解析的文件,如zip压缩文件,这种比较简单,直接使用<a>标签按照如下方式即可实现:

<a href="upload/php.zip">压缩包下载</a>

image.gif

第二种情况,下载浏览器可以解析的文件,如jpg、png图片。使用第一种方法,浏览器可以直接显示图片不会弹出对话框提示用户下载,这就需要使用header()函数来实现文件下载,代码如下:

header('content-disposition:attachment;filename=somefile');

image.gif

header()函数发送原生HTTP头,使用Content-Disposition的报文信息来提供一个推荐的文件名,并且强制浏览器显示一个文件下载的对话框。

具体实现如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件下载</title>
</head>
<body>
    <ul>
        <li><a href="upload/php.zip">压缩包下载</a></li>
        <li><a href="upload/列表页.jpg">图片下载</a></li>
        <li><a href="download.php?filename=upload/添加.jpg">图片2下载</a></li>
    </ul>
    
</body>
</html>

image.gif

image.gif 编辑

<?php 
  $filename = $_GET['filename'];
  echo "ss".$filename;
  header('content-disposition:attachment;filename='.basename($filename));
  header('content-length:'.filesize($filename));
  readfile($filename);
?>

image.gif

下载结果如下:

image.gif 编辑

下一篇 PHP 与Ajax 技术

目录
打赏
0
1
1
0
57
分享
相关文章
React 文件上传组件 File Upload
本文详细介绍了如何在 React 中实现文件上传组件,从基础的文件选择和上传到服务器,再到解决文件大小、类型限制、并发上传等问题,以及实现多文件上传、断点续传和文件预览等高级功能,帮助开发者高效构建可靠的应用。
447 12
|
8月前
pyqt6 绘图案例
本文介绍了三个使用 PyQt6 绘制图形的案例:绘制奥运图片、绘制五角星和绘制时钟。每个案例都提供了详细的代码示例和效果图,帮助读者更好地理解和实现这些图形绘制功能。
167 1
|
8月前
|
pyqt6 制作一个颜色调节器 01
本文介绍了一个使用 PyQt 制作的颜色调节器,通过滑动滚动条或旋钮来调整 RGB 三色,实现颜色的微调。具体步骤包括:1. 设计 UI 页面;2. 分析颜色调整逻辑;3. 将数据反馈到 UI 页面。最终实现了颜色随滑块变化而实时更新的效果。
183 1
|
8月前
|
PHP
29 JpGraph图像绘制库
路老师在知乎上分享了PHP语言的知识,帮助大家入门并深入了解PHP。本文介绍了JpGraph库的下载、使用及中文乱码设置,通过实例展示了如何使用JpGraph绘制折线图。
94 2
|
8月前
pyqt6 制作一个颜色调节器 02
本文介绍了如何使用PyQt6实现一个颜色调节器。首先创建了一个显示RGB颜色值变化的标签,然后通过三个旋钮(QDial)分别控制红、绿、蓝三种颜色的值,并在旋钮下方显示当前值。通过嵌套布局实现了旋钮和标签的排列,最终实现了颜色值的变化和显示。完整代码也一并提供。
173 0
|
8月前
pyqt6 实现弹窗案例
本文介绍了如何实现一系列弹窗效果,包括基础弹窗、消息对话框、输入对话框和清除按钮。通过设置 `self.dialog = Dialog()` 可以轻松实现基础弹窗,而消息对话框则使用 `QMessageBox` 类。输入对话框支持文本、数字和下拉列表输入,清除按钮用于清空输入框内容。每个功能都通过按钮触发相应的槽函数来实现。
553 0
20 PHP如何捕获sql错误
路老师带你深入学习PHP,掌握技术干货。本文介绍了PDO中捕获SQL错误的三种模式:默认模式、警告模式和异常模式,以及如何使用errorCode()和errorInfo()方法进行错误处理。
192 2
|
8月前
|
PHP
23 七天免登录案例
路老师分享了PHP语言的知识,帮助大家入门并深入了解PHP。本文通过一个“七天免登录”的案例,详细介绍了从创建用户表、登录页面到登录检测和退出登录的完整过程。代码示例详尽,适合初学者学习。
145 2
22 Cookie
路老师在知乎上分享PHP语言的知识,帮助大家入门并深入了解PHP。本文主要介绍Cookie的概念、功能及管理方法,包括如何创建、读取、删除Cookie,以及Cookie的生命周期等内容。纯干货,技术知识分享。
127 0
|
8月前
|
PHP
36 玩玩 ThinkPHP
本文介绍如何使用 PHPStudy 和 Composer 安装并配置 ThinkPHP 6。主要内容包括:创建工程目录、安装包管理工具 Composer、下载 ThinkPHP 架构包以及测试运行和配置。最后展示了 ThinkPHP 的目录结构和一些基本配置。通过这些步骤,你可以快速搭建一个 ThinkPHP 6 的开发环境。
123 1

数据库

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问