浏览器不显示文件已下载
Browsers Not Showing File Was Downloaded
为了工作,我正在处理文件导出。数据全部导出正常,但令人担忧的是没有出现文件对话框,浏览器也没有指示文件已下载。
我的文件下载包含两个 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()
谁能看出这不会提示用户使用文件对话框的任何原因?我们在其他项目中使用类似的代码,我的代码似乎缺少一些小部分。
您的 ContentType(MIME 类型)看起来不正确。试试这个:
context.Response.ContentType = "application/vnd.ms-excel"
无法使用 ajax.
将文件下载到客户端计算机
在您的 javascript 中,您需要使用 window.location.replace(downloadUrl)
或 window.open(downloadUrl)
。后者会打开一个新的window来下载文件,第一个会使用当前的window来执行下载。
供参考:Download a file by jQuery.Ajax
为了工作,我正在处理文件导出。数据全部导出正常,但令人担忧的是没有出现文件对话框,浏览器也没有指示文件已下载。
我的文件下载包含两个 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()
谁能看出这不会提示用户使用文件对话框的任何原因?我们在其他项目中使用类似的代码,我的代码似乎缺少一些小部分。
您的 ContentType(MIME 类型)看起来不正确。试试这个:
context.Response.ContentType = "application/vnd.ms-excel"
无法使用 ajax.
将文件下载到客户端计算机在您的 javascript 中,您需要使用 window.location.replace(downloadUrl)
或 window.open(downloadUrl)
。后者会打开一个新的window来下载文件,第一个会使用当前的window来执行下载。
供参考:Download a file by jQuery.Ajax