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
相关产品推荐
相关产品推荐

