Arhn - архитектура программирования

Загрузка файла из С# (ядро asp.net) [как серверная часть] и Angular [как внешняя часть]

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

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

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

введите здесь описание изображения

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

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

EDIT: (это сработало для меня)

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

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

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

введите здесь описание изображения

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

10.04.2020

  • Отвечает ли это на ваш вопрос? Angular: как скачать файл с HttpClient? 10.04.2020
  • Я сделал что-то подобное, но я думаю, что это не проблема, вы видите этот текст в консоли? он дает двоичные значения, но не показывает, что я не знаю, почему, если честно:/ 10.04.2020
  • Я заметил, что он выдает ошибку синтаксического анализа JSON, почти задаваясь вопросом, есть ли что-то, заставляющее метод контроллера возвращать объект JSON, а не поток, или ответ ожидает объект JSON вместо файловый поток (строка байтов). Нужно ли украшать метод контроллера, чтобы он возвращал JSON? 10.04.2020
  • Не могли бы вы посмотреть на изменения, которые я сделал, я решил эту проблему :) 10.04.2020
  • Я собирался предложить передать возврат из контроллера в FileStreamResult, но, похоже, вы решили проблему. 10.04.2020
  • Да, но я все еще не могу получить имя файла, если вы можете помочь :/ 10.04.2020

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..