Загрузите файл, обслуживаемый ASP.NET Core, используя AJAX - PullRequest
0 голосов
/ 27 марта 2019

У меня есть серверный код на ASP.NET Core, который возвращает файл:

    [HttpGet]
    [Route("update")]
    public IActionResult GetUpdate(int progId, string version)
    {
        var update = db.Updates.FirstOrDefault(u => u.ProgramId == progId && u.Version == version);
        if (update != null)
        {
            return new FileContentResult(update.Zip, "file/zip");
        }
        return BadRequest();
    }

Мне нужно как-то скачать его с AJAX.Я пытался сделать это так:

$('#testBtn').click(function () {
$.ajax({
    type: 'GET',
    url: 'https://localhost:44356/api/managment/update',
    data: 'progId=1&version=1.1',
    success: function(data) {
        const datafile = new Uint8Array(new Buffer(data));
        fs.writeFile('test.zip', datafile, (err) => {
            if (err) throw err;
            console.log('The file has been saved!');
        });
    }
})

И еще разные комбинации с буферами и массивами, но ничего не получалось.

Может кто-нибудь подскажет, что мне делать, или где я ошибаюсь

1 Ответ

0 голосов
/ 28 марта 2019

После некоторых исследований выяснилось, что я могу вернуть строку base64 из байтового массива, а затем легко записать ее. Сторона сервера (ядро asp.net 2.2):

    [HttpGet]
    [Route("update")]
    public string GetUpdate(int progId, string version)
    {
        var update = db.Updates.FirstOrDefault(u => u.ProgramId == progId && u.Version == version);
        if (update != null)
        {
            return Convert.ToBase64String(update.Zip);
        }
        return "failed";
    }

Клиентская сторона (электрон):

$.ajax({
    type: 'GET',
    url: 'https://localhost:44356/api/managment/update?progId=1&version=1.1',
    success: function(data) {
        fs.writeFile('test2.zip', data, {encoding: 'base64'}, (err) => {
            if (err) throw err;
            console.log('The file has been saved!');
        });
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...