从服务器下载文件使浏览器更改页面

时间:2018-05-23 20:44:30

标签: javascript c# download

我正在关注此页面中的答案(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)
        }
    });
}

如果我在浏览器中调试返回的数据,我会看到类型为文档 ..我不知道它是否有帮助,但值得一提。我该如何解决这个问题?提前谢谢!

0 个答案:

没有答案