Загрузка файла из c# (asp. net core) [в качестве внутреннего интерфейса] и Angular [в качестве внешнего интерфейса]. - PullRequest
0 голосов
/ 10 апреля 2020

Привет всем, я пытаюсь загрузить файл, используя этот метод в моем контроллере:

    [HttpGet]
    [Route("download/{id}&{bid}")]
    public async Task<IActionResult> Download(int id,int bid)
    {
        string filePath = _context.ConnectionDB.FirstOrDefault(r => r.Id == id).FolderName; 
        string fileName = _context.SavedBackups.FirstOrDefault(r => r.Id == bid).PathOfSave;
        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath+fileName);

        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
    } 

При отладке я получаю Путь комбинации: filePath+fileName, и мои fileBytes содержат значения.

В любом случае, когда я пытаюсь использовать это на своем клиенте FrontEnd:

Я использую эту функцию в своем сервисе для получения информации из моего бэкэнда:

  downloadBackupDB(dbConn: DBconnection, idSave: number): Observable<any> {
    const url =
      `${this.backupRestoreUrl}/` + `download/` + `${dbConn.id}&${idSave}`;
    return this.http.get(url);
  }

И в Мой компонент Я попытался просмотреть значение ответа с помощью этой функции:

onDownload(idOfDownload) {
    console.log('Download file id:', idOfDownload);
    console.log('Conn id:', this.dbConn.id);
    this.dbConnService
      .downloadBackupDB(this.dbConn, idOfDownload)
      .subscribe((res) => {
        console.log('resultat:', res);
    const blob = new Blob([res], { type: 'application/octet-stream' });

    this.sanitizer.bypassSecurityTrustResourceUrl(
      window.URL.createObjectURL(blob)
    );
      });
  }

Но он дает мне следующую ошибку:

enter image description here

Если есть лучшее решение или какие-либо идеи, не стесняйтесь поделиться со мной и сообществом, спасибо всем! :)

Я пытался использовать этот пример, который почти все работает: пример

РЕДАКТИРОВАТЬ: (это работало для меня)

Я изменил свою функцию в службе на:

  downloadBackupDB(dbConn: DBconnection, idSave: number): Observable<any> {
    const url =
      `${this.backupRestoreUrl}/` + `download/` + `${dbConn.id}&${idSave}`;
    return this.http.get(url, { responseType: 'blob' });
  }

И моя функция в компоненте:

onDownload(idOfDownload) {
    console.log('Download file id:', idOfDownload);
    console.log('Conn id:', this.dbConn.id);

    this.dbConnService
      .downloadBackupDB(this.dbConn, idOfDownload)
      .subscribe((res) => {
        console.log('res:', res);
        window.open(window.URL.createObjectURL(res));
      });
  }

Теперь он дает мне файл для загрузки, но под другим именем:

enter image description here

Но в функции в Backend я возвращаю свое имя файла, как его получить сейчас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...