Как определить, что имя файла существует при загрузке в файловом менеджере Angular

Я использую Файловый менеджер Angular в своем текущем приложении Angularjs.

Я хочу показать пользователю ошибку (например: имя файла существует) при загрузке файла с именем, существующим в каталоге.

$scope.uploadFiles = function () {

    /*******  I added these ↓↓↓ ********/
    var item = $scope.singleSelection();
    if (item) {
       var name = item.tempModel.name.trim();
       var nameExists = $scope.fileNavigator.fileNameExists(name);
       if (nameExists && validateSamePath(item)) {
          // this name is exist, so ↓
          $scope.apiMiddleware.apiHandler.error = $translate.instant('error_invalid_filename');
          return false;
       }
    }

/******* these code are exist before(your code) ↓↓↓ ********/

$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;
    });
}

Но в этом случае я должен выбрать элемент, а затем загрузить файл, что означает, что если я не выберу файл и не загружу новый файл с тем же именем, ошибка не появится. Мне нужно обнаружить текущий загруженный файл fileName

Как я могу этого добиться? заранее спасибо


person Morteza QorbanAlizade    schedule 20.01.2018    source источник
comment
попробуйте поместить свою функцию с onchange или ngchange, onchange={{myfunction}} в файл типа ввода.   -  person bormat    schedule 20.01.2018


Ответы (1)


Я решил проблему после многих поисковых и тестовых кодов.

Я добавляю метку времени к имени файла, если он повторяется.

В файле main.js

function checkRepetitive(file) {
    var currentList = $scope.fileNavigator.fileList;
    var repetitive = false;
    angular.forEach(currentList, function (item, index) {
       if (item.model.name === file.name) {
          repetitive = true
       }
    });

    return repetitive;
}


// click on upload file button in upload modal
$scope.uploadFiles = function () {

    angular.forEach($scope.uploadFileList, function (item, index) {

       if (checkRepetitive(item)) {

          // `morteza.jpg` => `morteza` + `new Date().getTime()).toString()` + `.jpg`
          var lastDotIndex = item.name.lastIndexOf('.');
          var fileName = item.name.substring(0, lastDotIndex);
          var extension = item.name.substring(lastDotIndex, item.name.length);

          // name was `read only` so, I can't change that if didn't write this ↓
          Object.defineProperty(item, 'name', {
             writable: true
          });

          angular.extend(item, {'name': fileName + (new Date().getTime()).toString() + extension});

       } // if (checkRepetitive(item)) {

 }); 
person Morteza QorbanAlizade    schedule 18.03.2018