You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS文件管理器上传时检测文件名重复的实现问题

解决Angular File Manager上传同名文件的检测问题

你的问题出在原逻辑依赖选中的文件项来做文件名检测,但用户上传时完全可能不选中任何文件直接上传,这时候$scope.singleSelection()返回undefined,检测逻辑就被跳过了。要实现真正的同名文件检测,我们应该直接针对待上传的文件列表做校验,而不是依赖选中的项。

修改后的完整代码

$scope.uploadFiles = function() {
  /******* 修改后的检测代码 ↓↓↓ ********/
  // 遍历待上传的所有文件,逐个检查文件名是否重复
  var duplicateFound = false;
  angular.forEach($scope.uploadFileList, function(file) {
    if (file && file.name) {
      var fileName = file.name.trim();
      // 检查当前目录下是否已存在同名文件
      if ($scope.fileNavigator.fileNameExists(fileName)) {
        duplicateFound = true;
        // 设置错误提示(建议用更精准的翻译键,比如'error_file_already_exists')
        $scope.apiMiddleware.apiHandler.error = $translate.instant('error_file_already_exists') || $translate.instant('error_invalid_filename');
        return false; // 终止循环
      }
    }
  });

  // 如果发现重复文件,直接返回阻止上传
  if (duplicateFound) {
    return false;
  }
  /******* 原有代码(官方代码) ↓↓↓ ********/
  $scope.apiMiddleware.upload($scope.uploadFileList, $scope.fileNavigator.currentPath).then(function () {
    $scope.fileNavigator.refresh();
    $scope.uploadFileList = [];
    $scope.modal('uploadfile', true);
  }, function (data) {
    var errorMsg = data.result && data.result.error || $translate.instant('error_uploading_files');
    $scope.apiMiddleware.apiHandler.error = errorMsg;
  });
};

关键修改说明

  • 移除选中项依赖:不再通过$scope.singleSelection()获取文件,而是直接遍历$scope.uploadFileList(这是用户选择的待上传文件集合)。
  • 逐个校验文件:对每个上传文件的文件名做trim处理后,调用$scope.fileNavigator.fileNameExists()检查当前目录是否存在同名文件。
  • 终止上传流程:只要发现任何一个重复文件,立即设置错误提示并返回false,阻止后续的上传请求。
  • 优化错误提示:建议你在翻译文件中新增error_file_already_exists对应的“文件名已存在”文本,这样提示更精准;如果暂时没有,也可以继续用原来的error_invalid_filename。

这样修改后,无论用户是否选中文件,只要上传的文件在当前目录有同名,都会触发错误提示,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Morteza QorbanAlizade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:55