代码之家  ›  专栏  ›  技术社区  ›  Marcel Stör

SourceForge的下载页面如何工作?

  •  3
  • Marcel Stör  · 技术社区  · 14 年前

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

    下载页的当前版本是如何实现的?我想做些类似的东西,因为我认为SF的解决方案相当优雅。

    好吧,更准确地说……是的,最初的“问题”太模糊了。

    如果你去 http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download 有一个简单的旧HTML链接来下载相关文件,但也有一个自动下载。延误似乎是2秒左右。

    有人问我的特定用例。我会回答这个问题,因为我知道它可能会在一定程度上偏离行动计划。非常简单:

    • 或多或少的传统JavaEE应用程序和两个servlet
    • 作为UI控制器入口点的Dispatcher servlet
    • 一个“文档servlet”将PDF流式传输到浏览器,它使用content disposition=attachment(即浏览器显示保存或打开对话框)来实现。
    • 带有许多输入字段和提交按钮的打印输出页
    • 单击提交按钮时
      • 输入字段值应该在UI模型中更新(必要时更新会话)->这是Dispatcher Servlet所做的工作
      • 必须触发PDF的创建->文档servlet就是这样做的

    如果采用SF的模型,表单提交将触发DispatcherServlet并重新加载当前页面(常规行为)。重新加载页面后,我会不知何故-对,SF是如何做到的?-使浏览器调用文档servlet。

    2 回复  |  直到 11 年前
        1
  •  8
  •   BalusC    14 年前

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

    这里有一个 SSCCE 只需复制粘贴就行了。

    <!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>
    
        2
  •  5
  •   Anton Gogolev    14 年前

    这是严格的mho,但我个人并不觉得sourceforge和codeplex的下载页面都特别优雅。看一看 Google Code :单击超链接立即开始下载,而不要求您接受任何类型的许可协议,请选择下载镜像或查看数十个横幅。它只做它必须做的:允许用户下载他们感兴趣的任何文件。