这是一个asp.net 3.5网站。
可以在IE / FF中正确下载文件。但不是铬。
该文件下载为“ASPS_Page_Name.aspx”。
然而,在我将Chrome浏览器更新为20.0.1132.47 m之前,它才有用。
我有这个函数来过滤掉MIME类型(用于ff,以前的chrome不需要这个函数)
Private Shared Function GetContentType(ByVal fileType As String) As String
Select Case fileType
'set to "application/vnd.ms-excel" MIME type for firefox
'MIME Types for IIS
Case "xls"
Return "application/vnd.ms-excel"
Case "xlsx"
Return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Case "pdf"
Return "application/pdf"
Case "doc"
Return "application/msword"
Case "docx"
Return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
Case "ppt"
Return "application/vnd.ms-powerpoint"
Case "pptx"
Return "application/vnd.openxmlformats-officedocument.presentationml.presentation"
Case Else
Return "application/octet-stream"
End Select
End Function
此时,使用此函数可以使用正确的名称下载xls / xlsx / pdf / ..文件,我想知道是否需要在此处或在web.config中指定所有mime类型以使下载工作
有谁知道chrome发生了什么以及如何修复这个“bug”?
这是下载功能,应该可以,因为它之前有效。
Public Shared Sub StreamFileToClient(ByVal memoryStream As IO.MemoryStream, ByVal fileName As String, ByVal fileType As String)
Try
memoryStream.Position = 0
'Serve to client
System.Web.HttpContext.Current.Response.ClearHeaders()
System.Web.HttpContext.Current.Response.ClearContent()
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;attachment; filename=" & fileName & "." & fileType)
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", memoryStream.Length.ToString())
System.Web.HttpContext.Current.Response.ContentType = GetContentType(fileType)
'octet-stream";
System.Web.HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray)
'System.Web.HttpContext.Current.Response.Flush()
'well good to use completerequest rather than .end nand .close. Read MSDN.
'System.Web.HttpContext.Current.Response.End()
'System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest()
Catch ex As Exception
Finally
System.Web.HttpContext.Current.Response.Flush()
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest()
memoryStream.Flush()
memoryStream.Dispose()
End Try
End Sub
答案 0 :(得分:2)
在bug 103618中有一些指导,其中说明Chrome在解析附件= *时变得更加严格,如果该名称包含任何分隔符,则该名称将不是您所期望的。 / p>
此外,“内联”似乎不是spec的一部分,所以我们可能会忽略它(尽管这是IE必须使用的)。您还可以使用“内嵌”和“附件”,移除内嵌并使用Chrome进行测试。