Привет всем, я пытаюсь загрузить файл, используя этот метод в моем контроллере:
[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)
);
});
}
Но он дает мне следующую ошибку:
Если есть лучшее решение или какие-либо идеи, не стесняйтесь поделиться со мной и сообществом, спасибо всем! :)
Я пытался использовать этот пример, который почти все работает: пример
РЕДАКТИРОВАТЬ: (это работало для меня)
Я изменил свою функцию в службе на:
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 я возвращаю свое имя файла, как его получить сейчас