PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

PHP+Ajax异步带进度条上传文件实例

管理员 2025-03-07
工作总结
53

在 PHP 中,结合 Ajax 和 HTML5 的 File API,可以实现带进度条的文件上传功能。以下是完整的实现代码和步骤:


1. 前端代码(HTML + JavaScript)

前端使用 FormData 和 XMLHttpRequest 实现文件上传,并通过 progress 事件更新进度条。

HTML 部分:

html
复制
<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>文件上传带进度条</title>
    <style>
        #progress {
            width: 100%;
            background-color: #f3f3f3;
            border: 1px solid #ccc;
            margin-top: 10px;
        }
        #progress-bar {
            width: 0%;
            height: 30px;
            background-color: #4caf50;
            text-align: center;
            line-height: 30px;
            color: white;
        }    </style></head><body>
    <h1>文件上传带进度条</h1>
    <form id="upload-form">
        <input type="file" name="file" id="file" required>
        <button type="submit">上传</button>
    </form>
    <div id="progress">
        <div id="progress-bar">0%</div>
    </div>
    <p id="status"></p>

    <script>
        document.getElementById('upload-form').addEventListener('submit', function (e) {
            e.preventDefault(); // 阻止表单默认提交行为

            var fileInput = document.getElementById('file');
            var file = fileInput.files[0];
            var formData = new FormData();
            formData.append('file', file);

            var xhr = new XMLHttpRequest();

            // 监听上传进度
            xhr.upload.addEventListener('progress', function (e) {
                if (e.lengthComputable) {
                    var percent = (e.loaded / e.total) * 100;
                    document.getElementById('progress-bar').style.width = percent + '%';
                    document.getElementById('progress-bar').innerText = Math.round(percent) + '%';
                }
            });

            // 监听上传完成
            xhr.addEventListener('load', function () {
                document.getElementById('status').innerText = '上传完成!';
                if (xhr.status === 200) {
                    console.log('服务器响应:', xhr.responseText);
                } else {
                    console.error('上传失败:', xhr.statusText);
                }
            });

            // 监听上传错误
            xhr.addEventListener('error', function () {
                document.getElementById('status').innerText = '上传出错!';
            });

            // 发送请求
            xhr.open('POST', 'upload.php', true);
            xhr.send(formData);
        });    </script></body></html>

2. 后端代码(PHP)

PHP 接收上传的文件并保存到服务器。

upload.php 文件:

php
复制
<?php// 检查是否有文件上传if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $uploadDir = 'uploads/'; // 上传文件保存目录
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true); // 如果目录不存在,则创建
    }

    $fileName = basename($_FILES['file']['name']); // 获取文件名
    $filePath = $uploadDir . $fileName; // 文件保存路径

    // 移动文件到目标目录
    if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
        echo "文件上传成功!路径:$filePath";
    } else {
        http_response_code(500);
        echo "文件上传失败!";
    }} else {
    http_response_code(400);
    echo "无效的请求!";}?>

3. 运行流程

  1. 用户选择文件并点击“上传”按钮。

  2. 前端通过 FormData 和 XMLHttpRequest 将文件发送到服务器。

  3. 服务器接收文件并保存到指定目录。

  4. 前端通过 progress 事件更新上传进度条。


4. 代码说明

前端部分:

  • FormData:用于构建表单数据,支持文件上传。

  • XMLHttpRequest:用于发送异步请求,并监听上传进度。

  • progress 事件:实时更新上传进度条。

后端部分:

  • $_FILES:PHP 全局变量,用于获取上传的文件信息。

  • move_uploaded_file:将上传的文件移动到目标目录。


5. 示例效果

  1. 用户选择文件后,点击“上传”按钮。

  2. 页面显示上传进度条,实时更新上传进度。

  3. 上传完成后,显示上传结果(成功或失败)。


6. 注意事项

  1. 文件大小限制

    • 在 PHP 中,默认上传文件大小限制为 2MB。可以通过修改 php.ini 中的以下配置来调整:

      ini
      复制
      upload_max_filesize = 10Mpost_max_size = 10M
    • 在前端也可以通过 <input type="file" accept=".jpg,.png" /> 限制文件类型。

  2. 安全性

    • 对上传的文件进行验证,确保文件类型和大小符合要求。

    • 重命名上传的文件,避免文件名冲突或恶意文件上传。

  3. 目录权限

    • 确保上传目录(如 uploads/)有写权限。


7. 完整代码结构

复制
/project
│
├── index.html          # 前端页面
├── upload.php          # 后端处理文件
└── uploads/            # 上传文件保存目录

通过以上代码,你可以实现一个带进度条的文件上传功能,适用于需要实时反馈上传进度的场景。



本文关键词: PHP+Ajax 异步 进度 上传 文件 实例

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部