Chrome中的文件下载显示错误的文件名[PageName] .aspx。它在我更新我的Chrome之前有效

时间:2012-07-11 12:20:31

标签: asp.net vb.net google-chrome iis-7

这是一个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

1 个答案:

答案 0 :(得分:2)

bug 103618中有一些指导,其中说明Chrome在解析附件= *时变得更加严格,如果该名称包含任何分隔符,则该名称将不是您所期望的。 / p>

此外,“内联”似乎不是spec的一部分,所以我们可能会忽略它(尽管这是IE必须使用的)。您还可以使用“内嵌”和“附件”,移除内嵌并使用Chrome进行测试。