我正在关注此页面中的答案(How to set a header for a HTTP GET request, and trigger file download?),以便从我的客户端调用服务器上的mvc控制器。我需要使用手动ajax调用而不是库/插件(如fileDownload),因为我需要支持bearer令牌。 我遇到的问题是,当我尝试下载内容时,控制器被正确命中并返回 FileDownloadResult 类型的数据:
public sealed class FileDownloadResult : IHttpActionResult, IDisposable
{
private readonly MemoryStream _dataStream;
private readonly string _fileName;
private readonly string _path;
private readonly string _mimeType;
private readonly string _encoding;
private string MimeType => string.IsNullOrWhiteSpace(_mimeType) ? "application/octet-stream" : _mimeType;
private string Encoding => string.IsNullOrWhiteSpace(_encoding) ? string.Empty : _encoding;
public FileDownloadResult(byte[] fileData, string fileName)
{
_dataStream = new MemoryStream(fileData);
_fileName = fileName;
}
}
...(other overrides methods for FileDownloadResult)...
问题是,通过使用开头链接的页面中的代码,我的浏览器会更改页面。我的代码在客户端上如下:
function downloadFile(url, data) {
$.ajax({
url: url,
type: "GET",
data: data,
headers: {
Authorization: 'Bearer ' + appsecurity.getBearerTokenWithoutHeader().accessToken
},
success: function (data) {
debugger;
$("a")
.attr({
"href": data.file,
"download": "file.txt"
})
.html($("a").attr("download"))
.get(0).click();
console.log(JSON.parse(JSON.stringify(data)));
},
error: function (jqxhr, textStatus, errorThrown) {
console.log(textStatus, errorThrown)
}
});
}
如果我在浏览器中调试返回的数据,我会看到类型为文档 ..我不知道它是否有帮助,但值得一提。我该如何解决这个问题?提前谢谢!