php+html+js+ajax实现文件上传

news2024/11/18 14:36:34

php+html+js+ajax实现文件上传

目录

一、表单单文件上传

1、上传页面

2、接受文件上传php

二、表单多文件上传

1、上传页面

2、接受文件上传php 

三、表单异步xhr文件上传

1、上传页面

2、接受文件上传php  

四、表单异步ajax文件上传 

1、上传页面

2、接受文件上传php   


一、表单单文件上传
1、上传页面
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="fileToUpload">
    <input type="submit" value="上传文件">
</form>
</body>
</html>
2、接受文件上传php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $targetDir = "uploads/"; // 上传文件保存的目录
    $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1; // 上传状态,1表示成功,0表示失败
    $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); // 上传文件的扩展名
    // 检查文件是否为真实的图像文件
    if (isset($_POST["submit"])) {
        $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
        if ($check !== false) {
            echo "文件是一个有效的图像 - " . $check["mime"] . ".";
            $uploadOk = 1;
        } else {
            echo "文件不是一个有效的图像.";
            $uploadOk = 0;
        }
    }
    // 检查文件是否已存在
    if (file_exists($targetFile)) {
        echo "对不起,文件已存在.";
        $uploadOk = 0;
    }
    // 检查文件大小
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "对不起,文件太大.";
        $uploadOk = 0;
    }
    // 允许上传的文件格式
    $allowedExtensions = array("jpg", "jpeg", "png", "gif");
    if (!in_array($imageFileType, $allowedExtensions)) {
        echo "对不起,仅允许上传 JPG, JPEG, PNG 和 GIF 文件.";
        $uploadOk = 0;
    }
    // 检查上传状态
    if ($uploadOk == 0) {
        echo "对不起,文件上传失败.";
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
            echo "文件上传成功.";
        } else {
            echo "对不起,文件上传失败.";
        }
    }
}
?>

 

二、表单多文件上传
1、上传页面
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>文件上传示例</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple>
    <input type="submit" value="上传文件">
</form>
</body>
</html>
2、接受文件上传php 
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $files = $_FILES["files"];
    // 检查是否有文件被上传
    if (!empty($files)) {
        // 循环处理每个上传的文件
        for ($i = 0; $i < count($files["name"]); $i++) {
            $file_name = $files["name"][$i];
            $file_tmp = $files["tmp_name"][$i];
            $file_size = $files["size"][$i];
            $file_error = $files["error"][$i];
            // 检查文件是否上传成功
            if ($file_error == UPLOAD_ERR_OK) {
                // 指定文件保存的路径和文件名
                $target_dir = "uploads/";
                $target_file = $target_dir . basename($file_name);
                // 将文件从临时目录移动到指定路径
                if (move_uploaded_file($file_tmp, $target_file)) {
                    echo "文件上传成功: " . $file_name . "<br>";
                } else {
                    echo "文件上传失败: " . $file_name . "<br>";
                }
            } else {
                echo "文件上传错误: " . $file_name . "<br>";
            }
        }
    } else {
        echo "没有选择要上传的文件";
    }
}
?>
三、表单异步xhr文件上传
1、上传页面
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<input type="file" id="fileToUpload" multiple>
<button onclick="uploadFiles()">上传文件</button>
<div id="progress"></div>
<div id="response"></div>

<script>
    function uploadFiles() {
        var input = document.getElementById('fileToUpload');
        var files = input.files;
        var formData = new FormData();
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            formData.append('files[]', file);
        }
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                document.getElementById('response').innerHTML = xhr.responseText;
            }
        };
        xhr.upload.onprogress = function(event) {
            if (event.lengthComputable) {
                var progress = (event.loaded / event.total) * 100;
                document.getElementById('progress').innerHTML = '上传进度:' + progress + '%';
            }
        };
        xhr.open('POST', 'upload.php', true);
        xhr.send(formData);
    }
</script>
</body>
</html>
2、接受文件上传php  
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $targetDir = "uploads/"; // 上传文件保存的目录
    if (!file_exists($targetDir)) {
        mkdir($targetDir, 0777, true); // 如果目录不存在,则创建目录
    }
    $uploadOk = 1; // 上传状态,1表示成功,0表示失败
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $targetFile = $targetDir . $_FILES['files']['name'][$key];
        $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); // 上传文件的扩展名
        // 检查文件是否已存在
        if (file_exists($targetFile)) {
            echo "对不起,文件已存在.";
            $uploadOk = 0;
        }
        // 允许上传的文件格式
        $allowedExtensions = array("jpg", "jpeg", "png", "gif");
        if (!in_array($imageFileType, $allowedExtensions)) {
            echo "对不起,仅允许上传 JPG, JPEG, PNG 和 GIF 文件.";
            $uploadOk = 0;
        }
        // 检查上传状态
        if ($uploadOk == 0) {
            echo "对不起,文件上传失败.";
        } else {
            if (move_uploaded_file($tmp_name, $targetFile)) {
                echo "文件上传成功.";
            } else {
                echo "对不起,文件上传失败.";
            }
        }
    }
}
?>
四、表单异步ajax文件上传 
1、上传页面
<!DOCTYPE html>
<html>
    <meta charset="UTF-8">
<head>
    <title>文件上传示例</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <button type="submit">上传</button>
</form>

<script>
    $(document).ready(function() {
        $('#uploadForm').submit(function(event) {
            event.preventDefault();

            var formData = new FormData(this);

            $.ajax({
                url: 'upload.php',
                type: 'POST',
                data: formData,
                dataType: 'text',
                processData: false,
                contentType: false,
                success: function(response) {
                    console.log('文件上传成功');
                },
                error: function() {
                    console.log('文件上传失败');
                }
            });
        });
    });
</script>
</body>
</html>
2、接受文件上传php   
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES['fileToUpload'])) {
        $file = $_FILES['fileToUpload'];

        // 文件上传成功
        if ($file['error'] === UPLOAD_ERR_OK) {
            $fileName = $file['name'];
            $tempPath = $file['tmp_name'];

            // 将文件移动到目标文件夹
            move_uploaded_file($tempPath, 'uploads/' . $fileName);

            echo '文件上传成功';
        } else {
            echo '文件上传失败';
        }
    } else {
        echo '未选择文件';
    }
}
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scala第二十章节

Scala第二十章节 scala总目录 文档资料下载 章节目标 理解Akka并发编程框架简介掌握Akka入门案例掌握Akka定时任务代码实现掌握两个进程间通信的案例掌握简易版spark通信框架案例 1. Akka并发编程框架简介 1.1 Akka概述 Akka是一个用于构建高并发、分布式和可扩展的基于事…

彻底关闭Win10/Win11关闭自动更新

在自己电脑上发现可以关闭win11系统自动更新&#xff0c;以后效果就不知道了 1.在开始菜单搜索框输入“注册表编辑器”并打开&#xff0c;如图所示 2.在注册表上方输入一下路径&#xff0c;如图所示 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings …

SAP FI BSEG-VBUND 贸易伙伴在过账中使用

主要的配置是在OBA7 主要是通过公司间记账&输入贸易伙伴来控制 第一种情况&#xff0c;两者都不勾选 如果在总账行项目&#xff0c;客户&#xff0c;供应商主记录中维护了贸易伙伴&#xff0c;贸易伙伴会被带入到所有的各自的行项目里面 第二种情况&#xff0c;公司间记账…

全网最细,真实企业性能测试落地实施,一文带你快速打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是性能测试…

墨西哥专线适合企业大批量寄送吗?

随着全球经济一体化的发展&#xff0c;企业间的交流与合作日益密切。跨境物流服务作为企业开展国际贸易的重要基础设施&#xff0c;其重要性不言而喻。墨西哥专线作为一种高效、快速的跨境物流解决方案&#xff0c;受到了越来越多企业的关注。那么&#xff0c;墨西哥专线是否适…

软件测试面试必问:为什么要选择软件测试?

经常会遇到一些面试官没事的时候问&#xff0c;为什么选择软件测试&#xff1f; 我都在这个行业&#xff0c;你怎么还问我为什么选择软件测试&#xff1f; 错误回答一&#xff1a;我觉得软件测试收入较高。 我们都知道软件测试收入是很高&#xff0c;但是这也不是你面试回答的点…

MATLAB导入EXCEL数据做曲线拟合

MATLAB导入EXCEL数据做曲线拟合 导入数据 导入的EXCEL格式为如下&#xff0c;有一列模拟数据和对应的实测数据 打开之后改个名&#xff0c;方便后续处理导入之和关掉该页面&#xff0c;可以看到已经生成了一个表格数据 然后新建变量 将该列数据复制到fanyan变量中&#x…

如何列出 Ubuntu 和 Debian 上已安装的软件包

当你安装了 Ubuntu 并想好好用一用。但在将来某个时候&#xff0c;你肯定会遇到忘记曾经安装了那些软件包。 这个是完全正常。没有人要求你把系统里所有已安装的软件包都记住。但是问题是&#xff0c;如何才能知道已经安装了哪些软件包&#xff1f;如何查看安装过的软件包呢&a…

智慧工地:数字革命下的建筑业新趋势

在当今建筑领域&#xff0c;智慧工地正迅速崭露头角。这个概念不仅代表了技术进步&#xff0c;还预示着建筑行业的数字化和智能化未来。从多个角度来看&#xff0c;智慧工地都具有深远的意义&#xff0c;它正在改变着我们建筑的方式和未来。 提高工程效率 智慧工地利用物联网&…

FP-Growth算法全解析:理论基础与实战指导

目录 一、简介什么是频繁项集&#xff1f;什么是关联规则挖掘&#xff1f;FP-Growth算法与传统方法的对比Apriori算法Eclat算法 FP树&#xff1a;心脏部分 二、算法原理FP树的结构构建FP树第一步&#xff1a;扫描数据库并排序第二步&#xff1a;构建树 挖掘频繁项集优化&#x…

Android:自定义列表弹窗的单选图标样式、去掉列表弹窗的上下提示线

正常声明一个单选列表弹窗&#xff0c;如下代码&#xff1a; AlertDialog.Builder builder new AlertDialog.Builder(this, R.style.Theme_AlertDialog_Base);String []items {"1111111","2222222","3333333","4444444","5555…

Android APT实现,SqInject的实现原理

一、APT技术简介 1、APT定义 APT(Annotation Processing Tool)即注解处理器&#xff0c;是一种处理注解的工具&#xff0c;确切的说它是javac的一个工具&#xff0c;它用来在编译时扫描和处理注解。注解处理器以Java代码作为输入&#xff0c;生成.java文件作为输出 2、注解定…

【three.js】坐标辅助器和轨道控制器

结合上一篇基本的3d页面代码&#xff0c;我们在里面添加坐标辅助器&#xff0c;也就是x y z轴坐标系&#xff0c;这样可以更直观的查看物体的位置 一、添加坐标辅助器 查看效果&#xff0c;z轴不显示是因为&#xff0c;z轴是正对我们脸部&#xff0c;从我们正面看就是一个点 …

蓝桥杯报名已经开始,还不知道怎么准备?教你一文通关蓝桥!

目录 引言 1、什么是蓝桥杯&#xff1f; 2、我应不应该参加蓝桥杯&#xff1f; 3、现在0基础参加还来得及吗&#xff1f;我不敢参加怎么办&#xff1f; 4、蓝桥杯的流程&#xff1f; 5、如何学习&#xff1f; 如果你是零基础 如果你有基础 6、刷题&#xff1f;周赛&am…

数据重整:用Java实现精准Excel数据排序的实用策略

摘要&#xff1a;本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在数据处理或者数据分析的场景中&#xff0c;需要对已有的数据进行排序&#xff0c;在E…

C++day02(引用、const、函数重载、结构体、类)

今日任务 代码&#xff1a; #include <iostream> /** 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c;定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出…

Maven 环境配置

Maven 是一个基于 Java 的工具&#xff0c;所以要做的第一件事情就是安装 JDK。 系统要求 项目 要求 JDK Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 内存 没有最低要求 磁盘 Maven 自身安装需要大约 10 MB 空间…

SwipeRefreshLayout 下拉刷新

1.SwipeRefreshLayout是Androidx提供的下拉刷新的库&#xff0c;需要在代码中引入该库&#xff0c;才能使用。 implementation androidx.swiperefreshlayout:swiperefreshlayout:1.1.0 2.在layout中配置。SwipeRefreshLayout&#xff0c;必须包含一个根节点的子view <com.e…

5+乳酸化修饰+预后模型

今天给同学们分享一篇乳酸化修饰预后模型的生信文章“Lactylation-Related Gene Signature Effectively Predicts Prognosis and Treatment Responsiveness in Hepatocellular Carcinoma”&#xff0c;这篇文章于2023年4月25日发表在Pharmaceuticals (Basel)期刊上&#xff0c;…

spring 事物源码阅读之事务与持久化操作的结合

前面文章说到在开启事务后&#xff0c;会将数据库连接存放在当前线程的ConnectionHolder。那么后续的数据库持久化操作是怎么感知的呢。这里就要说到一个重要的类TransactionSynchronizationManager。 TransactionSynchronizationManager TransactionSynchronizationManager是…