代码之家  ›  专栏  ›  技术社区  ›  Peter Stegnar

如何在ASP.NET AJAX中实现文件下载

  •  8
  • Peter Stegnar  · 技术社区  · 16 年前

    我想用标准的ASP.NET文件下载响应,喜欢吗 in other Stack Overflow question .

    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt");
    Response.TransmitFile( Server.MapPath("~/logfile.txt") );
    Response.End();
    

    4 回复  |  直到 9 年前
        1
  •  10
  •   Peter Stegnar    16 年前

    我在Encosia上找到了一篇很好的博客文章,描述了ASP.NET AJAX文件下载问题的解决方案。它真的很好用。

    http://encosia.com/2007/02/23/ajax-file-downloads-and-iframes/

        2
  •  2
  •   awe    16 年前

    您需要在一个不使用ajax的单独的aspx中使用它。Ajax正在更新客户端页面上现有的html标记。这里尝试的是在将任何内容发送到客户端之前替换服务器端的响应内容。

    你可以试试这个:

    有一个叫 Download.aspx 包含您已有的传输代码的。

    在原始页面中,您有一个javascript调用,它调用下载页面,如下所示:

    window.location.replace('Download.aspx');
    
        3
  •  0
  •   Myra    16 年前

    对于这项工作,您需要加密页面中放置文件链接的文件路径。

    <a href=\"Downloads.ashx?f={0}\" target=\"_blank\">Your link to file</a> 
    //{0} -> Encrypted file path
    //target = _blank force browser to download file in another window
    

    计算机中有很多加密技术 here

    处理者 System.IO 图书馆。

    context.Response.ContentType = ""; //-->MimeType for your file's extension
    

    除非mime类型是静态的,否则可以通过注册表指定mime类型。

    string mimeType = Registry.GetValue(string.Format(@"HKEY_CLASSES_ROOT\.{0}",
                      Path.GetExtension(decryptedfilePath)), "Content Type", null).ToString();
    
    //Then everything is ready for download
    
    byte[] buffer = File.ReadAllBytes(decryptedfilePath);
    context.Response.OutputStream.Write(buffer, 0 , buffer.Length);
    context.Response.Flush();
    

    祝你好运

        4
  •  0
  •   Dale K    12 年前

    我可以通过调用一个javascript函数来解决这个问题,该函数在没有EVENTTARGET的情况下调用doPostBack。

     function GxGridView_Export(exportLink, exportType) {
         var containingGrid = $(exportLink).closest("table .GxGridViewWithSlider");
         __doPostBack('', containingGrid.attr('id') + "###" + exportType);
     }
    

    然后,服务器端网格解析_事件参数并呈现导出文件。

    var eventArg = Page.Request.Form["__EVENTARGUMENT"];
    if (!string.IsNullOrEmpty(eventArg) && eventArg.Contains("###"))
    {
        var eventParams = eventArg.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries);
        if (eventParams.Length == 2 && eventParams[0] == this.ClientID)
        {
            ExportGrid(eventParams[1]);
            return;
        }
    }
    
    推荐文章