Как я могу определить загрузку файла в угловом формате? - PullRequest
0 голосов
/ 28 января 2019

Я работаю над Angular 7, я создаю в моем .Net Core API контроллер, который при его использовании отправляет файл пользователю, и он может загрузить этот файл.

В моем угловом приложении яхочу узнать, возможно ли обнаружить ссылку на другое событие для загрузки файла.

Я вижу это на developper mozilla:

function handleChanged(delta) {
  if (delta.state && delta.state.current === "complete") {
    console.log(`Download ${delta.id} has completed.`);
  }
}

browser.downloads.onChanged.addListener(handleChanged);

Я пытаюсь сделать это в моем угловом приложениино у меня есть сообщение об ошибке с этой строкой кода:

browser.downloads.onChanged.addListener(handleChanged);

Спасибо за вашу помощь.

edit:

my downloadслужба:

  generatePDF(elt){
    return this.http.post(`${this.config.catchApiUrl()}PDF`,elt,{responseType : 'blob', reportProgress:true}
    );
  }

мой абонент службы загрузки:

  onFormSubmit() {
    this.generateService.eltToGeneratePDF(1).subscribe(
      r => {
        this.generateService.generatePDF(r)
        .subscribe(
          r => {
            console.log("yeah")
            saveAs(r)},
          err => console.log(err)
        )
      }      
    )
 }

1 Ответ

0 голосов
/ 28 января 2019
  1. Пользователь щелкает ссылку, которая должна начать загрузку файла.
  2. JS-клиент (угловой) отправляет AJAX-запрос на сервер.
  3. Сервер генерирует downloadId, помещает в клиентсеанс (на стороне сервера) {downloadInfo: {downloadId: 123, status: ID_REQUESTED}} и отвечает с помощью downloadId.
  4. JS-клиент генерирует downloadUrl по downloadId и открывает его в новом окне / вкладке, так что браузерможно начать загрузку.

5 & 6 одновременно:

5.1.JS-клиент уведомляет пользователя каким-то информационным сообщением «Сохранить файл где-нибудь».

5.2.JS-клиент отправляет AJAX-запрос на сервер GET /download/status/?waitForCompletion=yes&timeout=10000'.

5.3.Сервер просматривает сеанс пользователя для downloadId, получает его статус и возвращает статус на сервер.Если waitForCompletion = yes, то сервер ожидает завершения загрузки, но не более, чем через миллисекунды.

6.1.Пользователь нажимает сохранить файл, браузер отправляет запрос на загрузку URL ('GET / download / data /')

6.2.Сервер изменяет downloadInfo в пользовательском сеансе '{downloadInfo: {status: IN_PROGRESS}' 'и начинает загрузку

6.3.Когда загрузка завершится, сервер изменит downloadInfo на «{status: COMPLETED}»

5.4.JS-клиент в ответ на 'GET / download / status / retrieve status' COMPLETED '

Приведенная выше версия предназначена для однократной загрузки, новая загрузка переопределяет downloadInfo, и сеанс на стороне сервера не загрязняется устаревшими загрузками.Если приложение должно разрешать одновременную загрузку нескольких файлов (и знать статус каждого), удалите статусы downloadId по таймауту:

  • keep lastAccessTime: 'downloadInfo: {downloadId123: {status: ID_REQUESTED, lastAcccessTime:123456789123456789}, downlaodId124: {...}} '
  • в какой-то момент удаляет устаревшие элементы, например, когда сервер обращается к downloadInfo для пользователя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...