【发布时间】:2017-03-01 16:40:51
【问题描述】:
为了工作,我正在处理文件导出。数据全部导出正常,但令人担忧的是没有出现文件对话框,浏览器也没有指示文件已下载。
我的文件下载包含两个 ajax 处理程序和一些 javascript。
我的按钮有一个 onclick 事件,它调用generateReport,它将一个微调器放在页面上并调用一个处理程序。此处理程序准备数据并将其保存到文件中。
一旦完成,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()
任何人都可以看到这不会通过文件对话框提示用户的任何原因吗?我们在其他项目中使用类似的代码,我的只是似乎缺少一些小块。
【问题讨论】:
-
前端调用的是什么javascript代码?是通过 ajax 还是窗口重定向完成的?
-
我还建议将
filePath.Substring(filePath.IndexOf("\Crm") + 1)更改为System.IO.Path.GetFileName(filePath) -
这是一个 ajax 调用,我会调查那个 GetFileName
标签: javascript vb.net asp.net-ajax