我目前正在开发一个项目,用户将选择一系列选项,点击提交,然后处理提交的页面将创建一堆逗号分隔的文件,将它们压缩并将它们发送回客户端。
我的大部分工作都很好,除了一部分。用户选择一组选项的页面然后通过表单提交调用处理所有文件创建内容的ASP页面。当用户点击提交时,我会显示一个进度条,以便他们知道该页面正在运行。
我遇到的问题是,如果我在脚本的末尾添加Response.Redirect
,则该文件不会被发送到浏览器。如果我没有在脚本末尾添加Response.Redirect
,那么调用页面就不会重新加载,而只是坐在那里就像它仍在工作一样。
我尝试过使用jQuery和AJAX,但这也不起作用。
一些代码......
标准选择页面
<form method="post" action="../../scripts/generate-presentation-data.asp" onsubmit="return submitform();">
...form items...
</form>
<script>
function submitform()
{
if ( confirm('Generate presentation data?') )
{ return true; }
else { return false; }
}
</script>
被叫页面:
Response.Buffer = True
...create files, zip them up etc...
Response.AddHeader "Content-Disposition", "attachment;filename=" & Chr(34) & "board-presentation-data.zip" & Chr(34)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile(sFilePath & "board-presentation-data.zip")
Response.BinaryWrite(objStream.Read)
如果我在此结尾处放置了重定向,则该文件永远不会被发送到浏览器。
我有什么想法可以让这样的东西正常工作吗?
感谢。
答案 0 :(得分:1)
您要求您的ASP代码有2个响应,一个是zip文件,另一个是重定向指令。请求只能有一个响应重定向指令或zip文件。
方法1
将生成的zip文件存储在Web中的特殊子文件夹中。使用随机GUID创建另一个子文件夹,并将生成的Zip文件放在那里。不要尝试在响应中发送Zip文件,而只是尝试重定向。
在您重定向到的网址中,您将在其查询字符串中编码已创建的zip文件的网址。
重定向的页面会在其HTML中生成一个链接,要求用户单击此处下载Zip。链接的URL将是zip文件的URL。您可以尝试使用Javascript导航到Load事件中的文件,或使用刷新META标记或其他技巧来自动下载文件,但如果这些appoaches失败,您将需要回退。
方法2
使用AJAX将数据发布到页面,该页面返回可以从中获取Zip文件的URL。此页面将发布的数据存储在会话中或生成如上所述的zip文件。返回的URL将是页面的URL,它将从存储在sesssion中的数据或zip本身的URL生成zip。
一旦帖子返回页面中的代码,然后可以在新窗口中打开返回URL,然后它可以自己导航到所需的最终URL。