当前位置: 首页 > news >正文

fetch、FormData上传多张图片

利用fetch方法和FormData对象上传多张图片
formdata()对象可以序列化多张图片

<html><head><meta http-equiv="content-type" content="text/html;charset=UTF-8"/><title>测试fetch和formdata上传多张图片</title></head><body><div id="upload">//accept="image/*"意思只能是图片<input type="file" name="uploadImg" id="uploadInput" multiple accept="image/*"><input type="button" name="uploadBtn" value="上传"/></div><script>function uploadImages(){//获取上传图片框const imagesInput=document.getElementById('uploadInput'),//转换成数组形式images=Array.from(imagesInput.files);//创建formData()对象  const formData=new FormData();//将每个图片都添加到formData对象中images.forEach((image,index) => {//这里用'files[]'数组最好,因为后端获取时是$_FILES['files'],如果用image或其它的表示,后端可能无法获取到图片组formData.append('files[]',image);});  //利用fetch上传图片fetch("fetchUpload.php",{method:'post',body:formData}).then((response)=>{return response.json();}).then((data)=>{console.log('Success:',data);}).catch(error=>{console.log('上传图片错误:',error);});}let btn=document.getElementsByName('uploadBtn');btn[0].addEventListener('click',uploadImages);</script></body>
</html>

后端文件

<?php
//图片类型白名单
$allowedTypes=['image/jpeg','image/png','image/gif'];
//检查文件是否存在
if(isset($_FILES['files']))
{
//赋值给变更$files;后面的$files['name']的原型为$_FILES['files']['name'][i]$files=$_FILES['files'];$uploadStatus=[];for($i=0;$i<count($files['name']);$i++){$fileTmpName=$files['tmp_name'][$i];$fileName=$files['name'][$i];$fileType=$files['type'][$i];if(in_array($fileType,$allowedTypes)){$uploadStatus[]=['name'=>$fileName,'status'=>'success'];}else{$uploadStatus[]=['name'=>$fileName,'status'=>'error','message'=>'不支持些文件格式'];}}echo json_encode($uploadStatus);
}else
{echo json_encode(['message'=>'没有文件上传']);
}?>

相关文章:

fetch、FormData上传多张图片

利用fetch方法和FormData对象上传多张图片 formdata()对象可以序列化多张图片 <html><head><meta http-equiv"content-type" content"text/html;charsetUTF-8"/><title>测试fetch和formdata上传多张图片</title></head&…...

C++STL详解(五)——list类的具体实现

一.本次所需实现的三个类及其成员函数接口 链表首先要有结点&#xff0c;因此我们需要实现一个结点类。 链表要有管理结点的结构&#xff0c;因此我们要有list类来管理结点。 链表中还要有迭代器&#xff0c;而迭代器的底层其实是指针。但是我们现有的结点类无法完成迭代器的…...

鸿蒙(API 12 Beta3版)【使用投播组件】案例应用

华为视频接入播控中心和投播能力概述** 华为视频在进入影片详情页播放时&#xff0c;支持在控制中心查看当前播放的视频信息&#xff0c;并进行快进、快退、拖动进度、播放暂停、下一集、调节音量等操作&#xff0c;方便用户通过控制中心来操作当前播放的视频。 当用户希望通…...

【STM32项目】在FreeRtos背景下的实战项目的实现过程(一)

个人主页~ 这篇文章是我亲身经历的&#xff0c;在做完一个项目之后总结的经验&#xff0c;虽然我没有将整个项目给放出来&#xff0c;因为这项目确实也是花了米让导师指导的&#xff0c;但是这个过程对于STM32的实战项目开发都是非常好用的&#xff0c;可以说按照这个过程&…...

C#垃圾处理机制相关笔记

C#编程中的垃圾处理机制主要通过垃圾回收器&#xff08;Garbage Collector&#xff0c;GC&#xff09;实现自动内存管理。C#作为一种托管语言&#xff0c;其垃圾处理机制显著减轻了程序员的内存管理负担&#xff0c;与C语言等非托管语言形成鲜明对比。具体介绍如下&#xff1a;…...

C语言memcmp函数

目录 开头1.什么是memcmp函数?2.memcmp函数的内部程序流程图 3.memcmp函数的实际应用比较整型数组比较短整型二维数组比较结构体变量…… 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要学一下关于C语言里的memcmp函数的一些知识。 1.什么是memcmp函数?…...

低代码: 组件库测试之Vue环境下的测试工具以及测试环境搭建

Vue Test Utils Vue Test Utils 1 targets Vue 2. Vue Test Utils 2 targets Vue 3. 特别注意要使用 版本 2.0.0 以上 提供特定的方法,在隔离的话环境下,进行组件的挂载,以及一系列的测试 配置开发环境 手动配置, 是比较麻烦的vue cli 是基于插件架构的, 插件可以: 安装对…...

【Vue3】高颜值后台管理模板推荐

ELP - 权限管理系统 基于Vue 3框架与PrimeVue UI组件库技术精心构建的高颜值后台权限管理系统模板。该模板系统已成功实现基于RBAC&#xff08;Role-Based Access Control&#xff09;模型的权限管理系统和字典数据管理模块&#xff0c;后端则使用了Spring Boot框架&#xff0…...

详细介绍Pytorch中torchvision的相关使用

torchvision 是 PyTorch 的一个官方库&#xff0c;主要用于处理计算机视觉任务。提供了许多常用的数据集、模型架构、图像转换等功能&#xff0c;使得计算机视觉任务的开发变得更加高效和便捷。以下是对 torchvision 主要功能的详细介绍&#xff1a; 1. 数据集&#xff08;Dat…...

AI部署——主流模型推理部署框架

我们以最经典的Yolov5目标检测网络为例解释一下10种主流推理部署框架的大概内容&#xff0c;省略模型训练的过程&#xff0c;只讨论模型转换、环境配置、推理部署等步骤。 Intel的OpenVINO — CPUNvidia的TensorRT — GPU/CPUOpenCV DNN Module — GPU/CPUMicrosoft ONNX Runti…...

PyTorch之loading fbgemm.dll异常的解决办法

前言 PyTorch是一个深度学习框架&#xff0c;当我们在本地调试大模型时&#xff0c;可能会选用并安装它&#xff0c;目前已更新至2.4版本。 一、安装必备 1. window 学习或开发阶段&#xff0c;我们通常在window环境下进行&#xff0c;因此需满足以下条件&#xff1a; Windo…...

Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法

一、对于Python代码 安装python插件即可实现 二、对于C/C代码 安装C/C插件即可实现...

力扣热题100_回溯_78_子集

文章目录 题目链接解题思路解题代码 题目链接 78. 子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff…...

浏览器如何工作(一)进程架构

分享cosine 大佬&#xff0c;版权©️大佬所有 浏览器的核心功能 浏览器&#xff0c;“浏览” 是这个产品的核心&#xff0c;浏览无非分为两步&#xff1a; 获取想浏览的资源 展示得到的资源 现代浏览器还增加了交互功能&#xff0c;这涉及到脚本运行。因此&#xff0c…...

【LeetCode】两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…...

UE5学习笔记11-为拿取武器添加动画

一、一点说明 动画实例通过扩展为所有机器上的每个字符都存在动画蓝图&#xff0c;动画实例只能访问该计算机上的变量。 二、思路 我在武器组件中有一个武器类的指针&#xff0c;判断当前指针是否为空去判断当前角色是否装备武器 三、实现 1.在角色C类中添加是否装备武器的函…...

68. 文本左右对齐【 力扣(LeetCode) 】

一、题目描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单…...

【中等】 猿人学web第一届 第6题 js混淆-回溯

文章目录 请求流程请求参数 加密参数定位r() 方法z() 方法 加密参数还原JJENCOde js代码加密环境检测_n("jsencrypt")12345 计算全部中奖的总金额请求代码注意 请求流程 请求参数 打开 调试工具&#xff0c;查看数据接口 https://match.yuanrenxue.cn/api/match/6 请…...

低、中、高频率段具体在不同应用中的范围是多少

1、低频率段&#xff08;Low Frequency Range&#xff09; ①建筑声学和噪声控制&#xff1a;通常将20 Hz 到 200 Hz 的频率范围视为低频段。在这一范围内&#xff0c;声音的波长较长&#xff0c;通常与低音&#xff08;如重低音音乐&#xff09;和建筑结构中的振动有关。 ②…...

Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧

Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧...

AI创业从模型竞赛到场景落地:2026年生态爆发与实战指南

1. 从HumanX 2026归来&#xff1a;我眼中的AI创业生态爆发图景刚从HumanX 2026的会场回来&#xff0c;整个人还沉浸在那种高速迭代、热气腾腾的氛围里。如果你问我最大的感受是什么&#xff0c;我会毫不犹豫地说&#xff1a;AI创业的“场景化落地”竞赛&#xff0c;已经进入了白…...

半导体虚拟计量技术:AI驱动的制造工艺优化

1. 半导体制造中的计量困境与虚拟计量技术崛起 在半导体制造车间里&#xff0c;工程师们每天都要面对一个令人头疼的难题&#xff1a;如何在保证产品质量的同时&#xff0c;又能实时掌握每一片晶圆的工艺状态&#xff1f;传统物理计量方法就像是用显微镜检查大海——虽然精确&a…...

容器技术从入门到精通:Docker核心概念、Dockerfile与生产实践全解析

1. 项目概述&#xff1a;从零到一构建容器化认知体系最近在技术社区里&#xff0c;经常看到有朋友在讨论stephrobert/containers-training这个仓库。乍一看&#xff0c;这像是一个个人或团队维护的关于容器技术的培训材料。对于刚接触 Docker 和容器生态的开发者、运维工程师&a…...

大型机场U型机坪推出等待点运行优化【附案例】

✨ 长期致力于机场、U型机坪区、推出等待点、运行程序优化、启发式算法研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;单通道U型机坪推出等待点位优化…...

奇异值分解(SVD):从黑盒到语义空间的一场解剖之旅

转载声明&#xff1a;本文核心思想源自 Jonathon Shlens A Tutorial on Principal Component Analysis、AMS Feature Column on SVD 及 LSA Tutorial 等经典文献&#xff0c;仅对叙述方式与图示进行重构&#xff0c;以适配中文技术社区的阅读语境。0. 开场&#xff1a;如果线性…...

为AI编码助手集成aislop-skill:实时代码质量检测与修复

1. 项目概述&#xff1a;为AI编码助手装上“质检员”如果你和我一样&#xff0c;日常重度依赖Cursor、Windsurf这类AI驱动的IDE&#xff0c;或者频繁使用Claude Code、Gemini CLI等代码生成工具&#xff0c;那你一定遇到过这样的场景&#xff1a;AI助手生成的代码&#xff0c;功…...

别再让代码异味溜走:手把手教你用SonarQube为团队搭建代码质量守护神

别再让代码异味溜走&#xff1a;手把手教你用SonarQube为团队搭建代码质量守护神 当项目规模从几千行扩展到几十万行代码时&#xff0c;技术债务就像房间里的大象——人人都知道存在&#xff0c;却少有人主动清理。去年我们团队在重构一个核心模块时&#xff0c;发现其中隐藏的…...

如何快速掌握雀魂Mod Plus:解锁全角色皮肤的新手完全指南

如何快速掌握雀魂Mod Plus&#xff1a;解锁全角色皮肤的新手完全指南 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等&#xff0c;支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为无法获得心仪角色和皮肤而烦恼…...

别再写循环了!ABAP SQL聚合函数COUNT/AVG/MAX实战指南,5分钟搞定数据统计

ABAP SQL聚合函数实战&#xff1a;告别低效循环&#xff0c;5分钟掌握高阶统计技巧 每次看到ABAP报表里那些嵌套三层的LOOP和SORT语句&#xff0c;我的血压就会悄悄升高。上周review同事代码时&#xff0c;发现一个统计物料库存的报表竟然用了三个嵌套循环——外层遍历工厂、中…...

OpenAccess十年:EDA互操作性标准如何重塑芯片设计流程

1. 从愿景到现实&#xff1a;OpenAccess十年之路的深度复盘十年前&#xff0c;也就是2002年的12月&#xff0c;当Si2&#xff08;硅集成倡议组织&#xff09;首次向联盟成员发布OpenAccess 2.0时&#xff0c;恐怕没有多少人能预料到&#xff0c;这个源于半导体巨头内部需求的“…...