0

0

如何实现多文件循环上传以及如何处理每次上传结果影响后续上传?

DDD

DDD

发布时间:2025-02-28 23:00:15

|

696人浏览过

|

来源于php中文网

原创

多文件循环上传及结果处理方案

本文探讨如何实现多文件循环上传,并处理每次上传结果对后续上传的影响。 需求如下:用户需循环上传多个文件,第一次上传 isrepeat 参数为 true,获取返回路径信息;后续上传 isrepeatfalse,并使用第一次上传返回的路径信息。

原方案存在逻辑缺陷:使用单次提交所有文件,并在函数内部循环处理,导致所有请求都带有 isrepeat=true。 路径信息获取及后续使用逻辑也不清晰。

改进方案采用异步操作和递归:

如何实现多文件循环上传以及如何处理每次上传结果影响后续上传?

改进代码:

STORYD
STORYD

帮你写出让领导满意的精美文稿

下载
const items = []; // 文件列表
let pathList = []; // 已上传文件路径

const upload = async (file, isRepeat) => {
  const formData = new FormData();
  formData.append('fileList', file);
  formData.append('pathList', pathList.join(',')); // 路径列表作为字符串
  formData.append('pid', this.currentNodeKey);
  formData.append('isrepeat', isRepeat);

  try {
    const res = await this.$myHttp({
      method: 'post',
      url: this.prefix + '/doc/docDir/uploadHtml2Public',
      data: formData,
      headers: { 'Authorization': 'Sys ' + sessionStorage.getItem('token'), 'showLoading': 'true' }
    });
    pathList.push(res.path); // 将返回路径添加到 pathList (假设路径在 res.path)
    return res;
  } catch (error) {
    console.error('上传失败:', error);
    throw error; // 抛出错误,以便处理
  }
};

const uploadFiles = async () => {
  if (items.length === 0) return;

  const file = items.shift();
  const isRepeat = pathList.length === 0; // 第一次上传 isRepeat 为 true

  try {
    await upload(file, isRepeat);
    await uploadFiles(); // 递归上传下一个文件
  } catch (error) {
    // 错误处理,例如重试机制
    console.error('文件上传失败,请检查网络或文件:', error);
    // 可在此添加重试逻辑
  }
};

// 初始化 items 数组 (例如):
items.push(file1, file2, file3); // 将文件对象添加到数组中

uploadFiles(); // 开始上传

此方案中,upload 函数负责单个文件上传,uploadFiles 函数递归调用 upload 实现循环上传。pathList 存储已上传文件路径,isrepeat 参数根据 pathList 长度动态设置。 代码假设后台返回路径信息在 res.path 属性中,实际情况需根据后台接口调整。 需根据实际需求完善错误处理和重试机制。

This revised response maintains the original image and uses more descriptive language while restructuring the information for better clarity and flow. It also adds a more descriptive title and a placeholder for a flowchart image, which could be added if available.

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

713

2023.08.22

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

81

2023.09.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

989

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

50

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

212

2025.12.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号