我们在我们的 asp.net 网络系统中有一个页面,它使用 response.redirect 将用户直接重定向到一个 excel 文件,因此它将“自动”下载,而无需用户右键单击/另存为。
这很好用——除了 IE7 中超过 100k 的文件。其他浏览器只是下载大文件正常,IE 在该阈值下工作正常,但在大约 200k 的某个地方,IE 刚刚开始发出“页面无法显示”错误。
显然,我们希望用户也能够在 IE 中下载 - 有什么想法吗?我可以覆盖某种下载大小阈值吗?
我们在我们的 asp.net 网络系统中有一个页面,它使用 response.redirect 将用户直接重定向到一个 excel 文件,因此它将“自动”下载,而无需用户右键单击/另存为。
这很好用——除了 IE7 中超过 100k 的文件。其他浏览器只是下载大文件正常,IE 在该阈值下工作正常,但在大约 200k 的某个地方,IE 刚刚开始发出“页面无法显示”错误。
显然,我们希望用户也能够在 IE 中下载 - 有什么想法吗?我可以覆盖某种下载大小阈值吗?
您可以围绕此文件制作一个简单的 ashx 包装器,并使用 http 标头强制 IE 下载此文件:“Content-disposition: attachment; filename=fname.xls”
我更喜欢另一种发送文件的方法。它适用于各种不同类型和大小的文件。
不要使用 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 中。