SourceForge的下载页面如何工作?

时间:2010-02-08 14:02:51

标签: javascript html ajax download

在回答其他问题时,有人指出SourceForge的下载页面通过添加隐藏的< iframe>来工作。这似乎不再是这样......

如何实施下载页面的当前版本?我想建立类似的东西,因为我认为SF的解决方案非常优雅。

好的,更准确地说......真的,最初的“问题”太模糊了。

如果您转到http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download,可以使用普通的旧HTML链接下载相关文件,但也可以自动下载。延迟似乎是2s。

有人问我的具体用例。我会回答,知道它可能会在一定程度上偏离OP。非常简化:

  • 或多或少带有两个Servlet的传统Java EE应用程序
  • 一个调度程序Servlet,它充当UI控制器的入口点
  • 将PDF文件流式传输到浏览器的“文档Servlet”,它使用content-disposition = attachment,即浏览器显示保存或打开对话框
  • 包含多个输入字段和提交按钮的打印输出页面
  • 单击提交按钮时
    • 输入字段值应在UI模型中更新(并在必要时进行会话) - >这就是调度程序Servlet所做的事情
    • 必须触发PDF的创建 - >这就是文档Servlet的作用

如果我采用SF的模型,表单提交将触发调度程序Servlet并重新加载当前页面(常规行为)。重新加载页面后,我会以某种方式 - 对,SF如何做到这一点? - 使浏览器调用文档Servlet。

2 个答案:

答案 0 :(得分:8)

只需在页面加载期间更改窗口位置。

这是一个SSCCE,只是复制'n'paste'n'run它。

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2222034</title>
        <script>
            window.onload = function() {
                setTimeout(function() {
                    window.location = 'http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar';
                }, 2000); // It's "cool" to let user wait 2 more seconds :/
            }
        </script>
    </head>
    <body>
        <p>The download of jstl-1.2.jar will start shortly...</p>
    </body>
</html>

或者,如果您需要使用POST,只需提交一个隐藏的表单:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2222034</title>
        <script>
            window.onload = function() {
                setTimeout(function() {
                    document.getElementById('downloadform').submit()
                }, 2000); // It's "cool" to let user wait 2 more seconds :/
            }
        </script>
    </head>
    <body>
        <p>The download of jstl-1.2.jar will start shortly...</p>
        <form id="downloadform" action="http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar"></form>
    </body>
</html>

答案 1 :(得分:5)

这是严格的MHO,但我个人既没有找到SourceForge,也没有找到CodePlex的下载页面特别优雅。看看Google Code:点击超链接立即启动下载,而不要求您接受任何类型的许可协议,选择下载镜像或查看数十个横幅。它只是做它必须做的事情:允许用户下载他们感兴趣的任何文件。