Я борюсь с проблемой загрузки больших файлов с использованием веб-API в asp net core и веб-интерфейса в React.
Когда файл начинает загружаться, он не показывает диалоговое окно браузера (Сохранить как файлДиалоговое окно), пока он не загрузит файл в память, а затем даст возможность сохранить его.
Когда размер файла больше, например, 200 МБ, пользователь не может выбрать, где сохранить файл, прежде чем начать его загрузку, и увидетьпрогресс загрузки во вкладке браузера.
Используется с веб-интерфейсом реагирования и веб-API в ядре aspnet. Прочитав несколько часов, я не смог найти решение. Я не могу использовать ссылку для загрузки файла, потому что мне нужно пройти аутентификацию с помощью токена.
Может быть, мне не хватает какой-либо конфигурации или настройки в моем бэкэнде / интерфейсе?
Любые предложения или советыБуду очень признателен.
Метод моего веб-API:
[HttpGet("{fileName}")]
[Authorize]
public IActionResult GetFile(string fileName)
{
Stream stream = _fileManager.GetFileContent(fileName);
// Response...
ContentDisposition cd = new ContentDisposition("attachment")
{
FileName = fileName,
// DispositionType = "attachment; filename=" + fileName + ";",
Inline = false // false = prompt the user for downloading; true = browser to try to show the file inline
};
Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString());
return File(stream, MediaTypeNames.Application.Zip);
}
Интерфейс использует axios, чтобы получить его.
async function Download() {
var authToken = await authService.Token();
console.log("calling request", process.env.REACT_APP_API_URL + "files/GetFile/iPro.zip");
if (authToken) {
BioAxios.get("/files/GetFile/file.zip", {
responseType: "blob",
headers: {
Authorization: "Bearer ".concat(authToken.access_token),
"Content-Type": "application/zip"
}
}).then(response => {
// Log somewhat to show that the browser actually exposes the custom HTTP header
console.log("Full Response", response);
// Let the user save the file.
FileSaver.saveAs(response.data, "file.zip");
});
}
}