欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > html:文件上传-一次性可上传多个文件,将文件展示到页面(可删除

html:文件上传-一次性可上传多个文件,将文件展示到页面(可删除

2025/4/19 0:06:48 来源:https://blog.csdn.net/weixin_46001736/article/details/147222802  浏览:    关键词:html:文件上传-一次性可上传多个文件,将文件展示到页面(可删除

一、原始上传样式

1、效果

2、完整代码 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 文件展示容器样式 */.file-preview-container {display: flex;flex-wrap: wrap;/* 换行 */gap: 10px;/* 小块之间的间距 */margin-top: 10px;}/* 文件小块样式 */.file-preview-item {display: flex;align-items: center;background-color: #f0f0f0;border: 1px solid #ccc;border-radius: 4px;padding: 5px 10px;font-size: 14px;white-space: nowrap;/* 防止文件名换行 */}/* 删除按钮样式 */.file-preview-item .delete-btn {margin-left: 10px;color: red;cursor: pointer;font-weight: bold;}</style>
</head><body><form id="uploadForm" action="upload.php" method="post" enctype="multipart/form-data"><label for="files">选择多个文件:</label><input type="file" name="files[]" id="files" multiple><br><br><!-- 文件展示区域 --><div id="file-preview-container" class="file-preview-container"></div><button type="submit">上传</button></form><script>document.addEventListener("DOMContentLoaded", function () {const fileInput = document.getElementById("files");const filePreviewContainer = document.getElementById("file-preview-container");const uploadForm = document.getElementById("uploadForm");// 存储选中的文件let selectedFiles = [];// 监听文件输入框的变化fileInput.addEventListener("change", function (event) {const files = Array.from(event.target.files); // 获取选中的文件列表// 清空之前的预览filePreviewContainer.innerHTML = "";selectedFiles = [];// 遍历文件并生成小块files.forEach((file) => {// 创建文件小块const fileItem = document.createElement("div");fileItem.className = "file-preview-item";fileItem.dataset.fileName = file.name; // 保存文件名作为标识// 显示文件名fileItem.innerHTML = `${file.name}<span class="delete-btn" onclick="removeFile('${file.name}')">&times;</span>`;// 添加到预览容器filePreviewContainer.appendChild(fileItem);// 将文件存入数组selectedFiles.push(file);});});// 删除文件的函数window.removeFile = function (fileName) {// 从数组中移除文件selectedFiles = selectedFiles.filter((file) => file.name !== fileName);// 从 DOM 中移除对应的小块const fileItem = document.querySelector(`.file-preview-item[data-file-name="${fileName}"]`);if (fileItem) {fileItem.remove();}};// 拦截表单提交事件uploadForm.addEventListener("submit", function (event) {event.preventDefault(); // 阻止表单默认提交行为// 构造 FormData 对象const formData = new FormData();// 将选中的文件添加到 FormData 中selectedFiles.forEach((file, index) => {formData.append("files[]", file); // 注意这里的键名要和服务器端一致});console.log(selectedFiles);// 使用 AJAX 提交文件// fetch("upload.php", {//     method: "POST",//     body: formData,// })//     .then(response => response.text())//     .then(data => {//         console.log("上传成功:", data);//         alert("文件上传成功!");//     })//     .catch(error => {//         console.error("上传失败:", error);//         alert("文件上传失败!");//     });});});</script>
</body></html>

二、扩展-隐藏原文件上传效果

1、效果

2、完整代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文件上传</title><style>/* 隐藏原生文件输入框 */#files {display: none;}/* 自定义按钮样式 */.custom-file-button,button {display: inline-block;padding: 10px 20px;background-color: #42b983;color: white;border-radius: 5px;cursor: pointer;font-size: 16px;border: none;}/* 文件展示容器样式 */.file-preview-container {display: flex;flex-wrap: wrap; /* 换行 */gap: 10px; /* 小块之间的间距 */margin-top: 10px;}/* 文件小块样式 */.file-preview-item {display: flex;align-items: center;background-color: #f0f0f0;border: 1px solid #ccc;border-radius: 4px;padding: 5px 10px;font-size: 14px;white-space: nowrap; /* 防止文件名换行 */}/* 删除按钮样式 */.file-preview-item .delete-btn {margin-left: 10px;color: red;cursor: pointer;font-weight: bold;}</style>
</head><body><form id="uploadForm" action="upload.php" method="post" enctype="multipart/form-data"><!-- 自定义文件选择按钮 --><label for="files" class="custom-file-button">选择文件</label><input type="file" name="files[]" id="files" multiple><br><br><!-- 文件展示区域 --><div id="file-preview-container" class="file-preview-container"></div><br><br><button type="submit">上传</button></form><script>document.addEventListener("DOMContentLoaded", function () {const fileInput = document.getElementById("files");const filePreviewContainer = document.getElementById("file-preview-container");const uploadForm = document.getElementById("uploadForm");// 存储选中的文件let selectedFiles = [];// 监听文件输入框的变化fileInput.addEventListener("change", function (event) {const files = Array.from(event.target.files); // 获取选中的文件列表// 清空之前的预览filePreviewContainer.innerHTML = "";selectedFiles = [];// 遍历文件并生成小块files.forEach((file) => {// 创建文件小块const fileItem = document.createElement("div");fileItem.className = "file-preview-item";fileItem.dataset.fileName = file.name; // 保存文件名作为标识// 显示文件名fileItem.innerHTML = `${file.name}<span class="delete-btn" onclick="removeFile('${file.name}')">&times;</span>`;// 添加到预览容器filePreviewContainer.appendChild(fileItem);// 将文件存入数组selectedFiles.push(file);});});// 删除文件的函数window.removeFile = function (fileName) {// 从数组中移除文件selectedFiles = selectedFiles.filter((file) => file.name !== fileName);// 从 DOM 中移除对应的小块const fileItem = document.querySelector(`.file-preview-item[data-file-name="${fileName}"]`);if (fileItem) {fileItem.remove();}};// 拦截表单提交事件uploadForm.addEventListener("submit", function (event) {event.preventDefault(); // 阻止表单默认提交行为// 构造 FormData 对象const formData = new FormData();// 将选中的文件添加到 FormData 中selectedFiles.forEach((file, index) => {formData.append("files[]", file); // 注意这里的键名要和服务器端一致});console.log(selectedFiles);// 使用 AJAX 提交文件// fetch("upload.php", {//     method: "POST",//     body: formData,// })//     .then(response => response.text())//     .then(data => {//         console.log("上传成功:", data);//         alert("文件上传成功!");//     })//     .catch(error => {//         console.error("上传失败:", error);//         alert("文件上传失败!");//     });});});</script>
</body></html>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词