未显示文件的浏览器已下载

时间:2016-10-19 21:09:43

标签: javascript vb.net asp.net-ajax

我正在处理文件导出工作。所有出口的数据都很好,但令人担忧的是没有出现文件对话框,浏览器也没有表明该文件已被下载。

我的文件下载包含两个ajax处理程序和一些javascript。 我的按钮有一个onclick事件,这会调用generateReport,它将一个微调器放在页面上并调用一个Handler。该处理程序准备数据并将其保存到文件中。

一旦完成,javascript将调用第二个处理程序,该处理程序检索已保存的文件,并且应该将其发送给用户,并提示他们保存它。调用第二个处理程序并且不会抛出任何错误。

我的第二个(不工作)处理程序在这里:

baseDir = ProjectConfig.BaseShareFolderPath
        Dim fileStream As FileStream = New FileStream((baseDir + "\" + filePath), FileMode.Open, FileAccess.Read)
        Dim bytes As Byte()
        Dim binaryReader As BinaryReader = New BinaryReader(fileStream)

        bytes = binaryReader.ReadBytes(fileStream.Length)
        fileStream.Close()
        fileStream.Dispose()
        binaryReader.Close()

        Dim fileName As String = filePath.Substring(filePath.IndexOf("\Crm") + 1)
        context.Response.ContentType = "xls"
        context.Response.AppendHeader("content-disposition", "attachment;filename=" & fileName)
        context.Response.OutputStream.Write(bytes, 0, bytes.Length)
        context.Response.OutputStream.Flush()
        context.Response.OutputStream.Close()
        context.Response.End()

任何人都可以看到任何不会提示用户使用文件对话框的原因吗?我们在其他项目中使用类似的代码,我似乎缺少一些小块。

2 个答案:

答案 0 :(得分:0)

您的ContentType(MIME类型)看起来不正确。试试这个:

context.Response.ContentType = "application/vnd.ms-excel"

答案 1 :(得分:0)

无法使用ajax将文件下载到客户端计算机。

在您的JavaScript中,您需要使用window.location.replace(downloadUrl)window.open(downloadUrl)。后者将打开一个新窗口下载文件,第一个将使用当前窗口执行下载。

供参考:Download a file by jQuery.Ajax