Привет всем, я пытаюсь загрузить файл, используя этот метод в моем контроллере:
[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 я возвращаю свое имя файла, как мне его теперь получить?