2

我目前正在做一个项目,用户将选择一堆选项,点击提交,然后处理提交的页面将创建一堆逗号分隔的文件,将它们压缩并将它们发送回客户端。

除了一部分之外,我的大部分工作都很好。用户选择一堆选项的页面然后通过表单提交调用处理所有文件创建内容的 ASP 页面。当用户点击提交时,我会显示一个进度条,以便他们知道页面正在运行。

我遇到的问题是,如果我Response.Redirect在脚本末尾添加 a,则文件不会发送到浏览器。如果我不在Response.Redirect脚本末尾添加 a ,则调用页面不会重新加载,而是像它仍在工作一样坐在那里。

我试过用 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)

如果我在最后放置一个重定向,则文件永远不会发送到浏览器。

有什么想法可以让这样的东西正常工作吗?

谢谢。

4

1 回答 1

1

您要求您的 ASP 代码有 2 个响应,一个是 zip 文件,另一个是重定向指令。一个请求只能有一个响应,要么是重定向指令,要么是 zip 文件。

方法一

将生成的 zip 文件存储在 web.xml 的特殊子文件夹中。使用随机 GUID 创建另一个子文件夹,并将生成的 Zip 文件放在那里。不要尝试在响应中发送 Zip 文件,而只是发送到您的重定向。

在您重定向到的 url 中,您会将创建的 zip 文件的 URL 编码到其查询字符串中。

重定向页面将在其 HTML 中生成一个链接,要求用户单击此处下载 Zip。链接的 url 将是 zip 文件的 URL。您可以尝试使用 Javascript 在 Load 事件中导航到文件,或者使用刷新 META 标记或其他技巧来自动下载文件,但如果这些方法失败,您将需要回退。

方法二

使用 AJAX 将数据发布到返回可从中获取 Zip 文件的 URL 的页面。该页面要么将发布的数据存储在会话中,要么如上所述生成 zip 文件。返回的 URL 将是一个页面的 URL,该页面将从会话中存储的数据生成 zip,或者是 zip 本身的 URL。

一旦帖子在页面中返回代码,就可以在新窗口中打开返回 URL,然后它可以自行导航到所需的任何最终 URL。

于 2012-08-10T15:46:57.643 回答