2

我们在我们的 asp.net 网络系统中有一个页面,它使用 response.redirect 将用户直接重定向到一个 excel 文件,因此它将“自动”下载,而无需用户右键单击/另存为。

这很好用——除了 IE7 中超过 100k 的文件。其他浏览器只是下载大文件正常,IE 在该阈值下工作正常,但在大约 200k 的某个地方,IE 刚刚开始发出“页面无法显示”错误。

显然,我们希望用户也能够在 IE 中下载 - 有什么想法吗?我可以覆盖某种下载大小阈值吗?

4

2 回答 2

2

您可以围绕此文件制作一个简单的 ashx 包装器,并使用 http 标头强制 IE 下载此文件:“Content-disposition: attachment; filename=fname.xls”

如何为已知 MIME 类型打开“文件下载”对话框

于 2008-12-15T18:46:55.170 回答
1

我更喜欢另一种发送文件的方法。它适用于各种不同类型和大小的文件。

不要使用 Response.Redirect,而是允许文件的链接在您修改响应的地方进行回发,如下所示:

Public Shared Sub SendFileToBrowser(ByRef response As HttpResponse, ByVal filepath As String, Optional ByVal filename As String = "", Optional ByVal contentType As String = "", Optional ByVal disposition As String = "", Optional ByVal contentLength As String = "")
    Dim ext As String = filepath.Substring(filepath.Length - 3, 3)

    If String.IsNullOrEmpty(contentType) Then
        If ext = "pdf" Then
            contentType = "application/pdf"
        Else
            contentType = "application/file"
        End If
    End If

    If String.IsNullOrEmpty(disposition) Then
        disposition = "attachment"
    End If

    If String.IsNullOrEmpty(filename) Then
        ''//Test for relative url path
        Dim fileparts As String() = filepath.Split("/")
        If fileparts.Length > 1 Then
            filename = fileparts(fileparts.Length - 1)
        Else
            ''//Test for absolute file path
            Dim fileparts2 As String() = filepath.Split("\")     ''//" SO: Fix syntax highlighting
            If fileparts2.Length > 1 Then
                filename = fileparts2(fileparts2.Length - 1)
            Else
                ''//Just give it a temp name
                filename = "temp." & ext
            End If
        End If
    End If

    response.Clear()

    response.AddHeader("content-disposition", disposition & ";filename=" & filename)
    If Not String.IsNullOrEmpty(contentLength) Then
        response.AddHeader("Content-Length", contentLength)
    End If

    response.ContentType = contentType

    response.Cache.SetCacheability(HttpCacheability.Public)        

    response.TransmitFile(filepath)
    response.End()
End Sub

注意:使用“''//”作为注释,以便语法高亮显示正常工作。这仍然可以正确编译。

这适用于我们在 IE6 和 IE7 中。

于 2008-12-15T18:45:33.973 回答