1

我有这个动作在这里执行下载:

[HttpGet]
    public void Download(string FileName)
    {
        string FilePath = System.AppDomain.CurrentDomain.BaseDirectory + "Exe\\";

        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "video/mp4";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ");
        response.TransmitFile(FilePath + FileName);
        response.Flush();
        response.End();
    }

在我的一个观点中,我对这个动作进行了 ajax 调用,如下所示: var options = { url: 'Home/Download?filename=' + file.Name + file.Extension, method: 'GET' };

    $.ajax(options)
    .done(function () {
        console.log('You successfully downloaded ' + file.Name);
    })
    .fail(function () {
        console.log('Something bad happened');
    });

当我构建我的项目并导航到 /home/download?id=filename 时,一切正常:chrome 开始下载。但是当我使用上面的 ajax 调用调用done回调时,下载成功,但我在浏览器(chrome)的任何地方都看不到下载,它也没有问我把这个文件放在哪里。首先,这个文件到底去哪儿了?为什么当我使用 ajax 调用时它的行为不同?

感谢您的帮助。

PS:从“获取”更改为“发布”不会导致不同的结果。

4

2 回答 2

0

你不能用ajax来做。

但是,有很多技巧可以帮助您:

  • 将整个页面重定向到下载地址,
  • 用于重定向隐藏的 iframe

这两个是可以使用的方法,您也可以尝试使用现有的 jquery 插件。

于 2013-07-27T08:53:56.517 回答
0

浏览器只会将返回的数据视为“数据”。您可以简单地使用隐藏的 iframe 调用保存对话框

<iframe id="#iframe" src="/home/download?id=filename"></iframe>

$('#download').click(function(){
  $('#iframe').attr('src','/home/download?id=newfilename');
}
于 2013-07-27T09:15:15.760 回答