当前位置: 首页 > 知识库问答 >
问题:

javascript - 循环上传问题?

长孙泉
2024-02-26

想循环上传每个文件,循环第一次时isrepeat参数为true,拿到第一次循环上传成功后台返回的路径,作为往下循环的pathList,并且往下循环isrepeat参数为false,思路有点凌乱乱...

upload(data,action) {      let formData = new FormData()      data.forEach((item) => {        formData.append('fileList', item)        if (data.length === 1 || action === 'fileUpload') {          //单文件          formData.append('pathList', item.name)        } else {          formData.append('pathList', item.webkitRelativePath)        }        formData.append('pid', this.currentNodeKey)        formData.append('isrepeat', true)        this.$myHttp({          method: 'post',          url: this.prefix + '/doc/docDir/uploadHtml2Public',          data: formData,          headers: { 'Authorization': 'Sys ' + sessionStorage.getItem('token'), 'showLoading': 'true' }        }).then((res) => {          this.refreshTree()        }).catch((error) => {          console.log(error)        })        })          }

共有1个答案

施海
2024-02-26

首先,从你的代码中可以看到,你正在使用循环来上传文件,并且在每次上传时,你都在 formData 对象中添加了新的参数。然后,你使用 this.$myHttp 方法发送一个 POST 请求。

然而,你的代码中存在一些问题。在每次循环中,你都创建了一个新的 formData 对象,这会导致每次循环都发送一个新的 POST 请求,而不是按照你的预期那样,一次循环发送一个文件。

另外,你在每次循环中都添加了 isrepeat 参数,这可能不是你想要的。你可能只想在第一次循环时设置 isrepeattrue,然后在后续的循环中将其设置为 false

以下是一个可能的解决方案:

upload(data, action) {  let formData = new FormData();  let isrepeat = true; // 初始化 isrepeat 为 true  data.forEach((item, index) => {    formData.append('fileList', item);    if (data.length === 1 || action === 'fileUpload') {      formData.append('pathList', item.name);    } else {      formData.append('pathList', item.webkitRelativePath);    }    formData.append('pid', this.currentNodeKey);    formData.append('isrepeat', isrepeat); // 根据索引设置 isrepeat 的值    this.$myHttp({      method: 'post',      url: this.prefix + '/doc/docDir/uploadHtml2Public',      data: formData,      headers: {         'Authorization': 'Sys ' + sessionStorage.getItem('token'),         'showLoading': 'true'       }    }).then((res) => {      if (index === data.length - 1) { // 如果是最后一次循环,刷新树状结构        this.refreshTree();      }    }).catch((error) => {      console.log(error);    });    isrepeat = false; // 在每次循环的末尾将 isrepeat 设置为 false  });}

在这个修改后的代码中,我保留了 isrepeat 参数的逻辑,并在每次循环的末尾将其设置为 false。同时,我也添加了一个检查,以确保在处理完所有文件后刷新树状结构。这样就可以解决你的问题。

 类似资料:
  • 问题内容: 我有以下代码片段。 上面的代码用于生成5个链接,并将每个链接与警报事件绑定以显示当前链接ID。但这是行不通的。当您单击生成的链接时,它们都说“链接5”。 但是以下代码段符合我们的预期。 这里引用了以上两个片段。 但是它是如何工作的以及 关闭 是如何工作的,这些都是我无法理解的。为什么第一个不起作用而第二个却起作用?任何人都可以对魔术进行详细说明吗? 谢谢。 问题答案: 解释第一个示例:

  • elementplus表格,如下图有两条数据,每行有多个city和address循环展示在一行,前端该怎么处理呢,返回数据格式如下

  • 我是java的新手,我正在编写这个简短的程序,您可以在其中猜测1到10之间的数字。正确的数字存储为整数。如果您猜测较低的数字,它应该说“正确的数字较高”,如果您猜测较高,它应该说“正确的数字较低”。这是我所拥有的: 所以很明显这是行不通的,因为如果你输入一个更小的数字,它会跳到下一个数字,即使这个数字更大,它也是正确的。那么,我如何解决这个问题,让它检查两个语句呢?抱歉解释得不好。谢了。

  • 请问下uniapp打包成app怎么上传图片,可以用chooseImage上传图片吗,chooseImage是不是已经被淘汰了,新版的chooseMedia不支持

  • 问题内容: 专家。JavaScript无法产生所需的延迟效果。 从其他问题上,我因此知道,问题在于settimeout及其使用方式。但是我仍然无法理解Settimeout的工作原理。所以我将代码放在这里。由于知识目的,仅需使用Javascript。 实际上,我正在尝试清除有关 此的 概念,即javascript中的 闭包 。它们是Java的扭曲事物吗? 问题答案: 您有两个问题: 调用回调时将具有

  • 主要内容:JS break 语句,JS continue 语句,JavaScript 标签通过前面对循环的学习我们知道,默认情况下循环会在表达式结果为假时自动退出循环,否则循环会一直持续下去。某些情况下,我们不用等待循环自动退出,可以主动退出循环,JavaScript 中提供了 break 和 continue 两个语句来实现退出循环和退出(跳过)当前循环,下面我们就来详细介绍一下。 JS break 语句 在学习《 JS switch case语句》时我们已经简单了解过了 break