javascript - 如果文件已经存在于javascript中,如何增加文件名

标签 javascript reactjs

我已经在我的 react 项目中实现了拖放文件上传,所以每次将文件拖放到拖放区时,我都会获取文件并访问它的名称和数据,并使用 javscript 将数据转换为 base64 FileReader()readAsDataURL() 并更新状态,我需要将其发送给 bakend。

如果状态中已经存在同名文件,如何在文件名后面加上数字?

例如:file(1).csvfile 2.csv

enter image description here

主要状态

this.state : {
     Files:[],
}

每次拖放文件都会触发的函数

   FileHandling = (files) => {
    files.forEach((file) => {
      const reader = new FileReader();

      reader.readAsDataURL(file);
      reader.onload = () => {

        const CompleteData= {
          fileData: reader.result,
          fileName: file.name,
        };
         this.setState({
             Files:[...this.state.Files, CompleteData]
            })
      };
    });
  };

最佳答案

在行中添加您想要的任何图案并添加注释。

 const getUniqueName = (fileName, index = 0) => {
   let checkName = fileName, ext = '';
   if(index){
     if(checkName.indexOf('.') > -1){
       let tokens = checkName.split('.'); ext = '.' + tokens.pop();
       checkName = tokens.join('.');
     }

     // make any pattern here
     checkName = `${checkName} (${index})${ext}`; 
   }
   
   const nameExists = this.state.Files.filter(f=>f.fileName === checkName).length > 0;
   return nameExists ? getUniqueName(fileName, index + 1) : checkName;
 }

 FileHandling = (files) => {
    files.forEach((file) => {
      const reader = new FileReader();

      reader.readAsDataURL(file);
      reader.onload = () => {
        const CompleteData = {
          fileData: reader.result,
          fileName: getUniqueName(file.name),
        };
         this.setState({
             Files:[...this.state.Files, CompleteData]
            })
      };
    });
  };

关于javascript - 如果文件已经存在于javascript中,如何增加文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64971079/

相关文章:

javascript - 我如何将 token 值存储到本地 javascript 文件中

javascript - angularJS + jQuery jeditable 插件协同工作

Javascript 菜单,如 JQuery Mobile

javascript - React Native NetInfo 'connectionChange' 事件未触发

javascript - ReactJS - 如何在 map 函数中设置状态

javascript - 如果已在 WordPress 插件菜单中使用,我可以捕获单击元素吗?

javascript - 如何测试某些字符是否在 Javascript 字符串的某些部分

reactjs - 如何在 nextjs 中使用不同的 .env 文件?

javascript - 我将 DOM 元素的高度全部设置为相同的 var,但它们似乎具有不同的高度?

reactjs - React - 如何获取组件子元素的大小并重新定位它们