Проверка существования файла (Dropbox API v2) - PullRequest
0 голосов
/ 08 октября 2019

Я работаю над проектом со следующим технологическим стеком: Angular, Ionic, Cordova. При загрузке файла в Dropbox мне нужно проверить, находится ли он на диске или нет. Если файл уже существует на диске, мне нужно его переименовать. Я использую (https://www.dropbox.com/developers/documentation/http/documentation#files-get_metadata) для проверки существования файла. Логика такова: если этот метод возвращает ошибку, то такого файла нет, и я загружаю его. Если метод возвращает метаданные, файл должен бытьпереименован. При таком подходе запрос к консоли выдаст ошибку (это естественно). Есть ли альтернатива такому подходу, который не дал бы ошибку консоли? Это кусок кода, который реализует этот подход.

  async getNewFileName(fileName: string): Promise<string> {
    const { name, extension } = getNameExtension(fileName);
    for (let i = 0;; i++) {
      const tmpName = i ? `${name}(${i}).${extension}` : fileName;
      if (!await this.checkDropBoxFile(tmpName)) {
        return tmpName;
      }
    }
    return fileName;
  }

  async checkDropBoxFile(fileName: string): Promise<any> {
    const dbx = this.getDropbox();
    try {
      const res = await dbx.filesGetMetadata({ path: '/' + fileName });
      return res;
    } catch (e) {
      return false;
    }
  }

1 Ответ

0 голосов
/ 09 октября 2019

Вместо вызова /files/get_metadata для каждого имени файла, чтобы проверить, существует ли оно, вы можете использовать /files/list_folder конечную точку , чтобы просмотреть все содержимое папки, а затем выполнить итерации по результатам, чтобы проверить имена файлов. ,Это избавит от ошибки и, в зависимости от структуры вашего приложения, может привести к меньшему количеству вызовов API Dropbox.
Вы можете поиграть с конечной точкой /files/list_folder (и другими) в Dropbox . API проводник .

...