我在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!');
});
}
})
还有更多不同的缓冲区和数组组合,但没有用。
请任何人建议我该怎么办,或者我在哪里错了?
答案 0 :(得分:0)
经过一些研究,发现我可以从字节数组返回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!');
});
}
})