SourceForge 的下载页面如何运作?

2024-01-04

在回答其他问题时,有人指出 SourceForge 的下载页面是通过添加隐藏的

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

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

如果你去http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download有一个简单的旧 HTML 链接可以下载相关文件,但也有自动下载。延迟好像有2s左右。

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

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

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


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

这是一个SSCCE http://sscce.org,只需复制、粘贴并运行即可。

<!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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SourceForge 的下载页面如何运作? 的相关文章

随机推荐

  • 编辑巨大的sql数据文件

    我有一个 23GB 的文件 我想编辑第 23 行 但服务器上只有 200 MB 可用 RAM 我不想完全打开该文件 因为我只剩下 20GB 可用磁盘空间 我怎样才能做到这一点 我尝试使用 head tail sed 但它似乎创建了一个临时文
  • 具有动态功能的即时应用程序始终显示带有 1 个选项的消歧对话框

    我正在尝试动态功能和即时应用程序 为了在各种功能之间导航 我使用深层链接 每次我导航到另一个 Activity 时 我都会看到消歧对话框 时间不到 1 秒 其中列出了 1 个应用程序 请注意 一次 和 始终 荷兰语 选项是如何变灰的 示例
  • 从 Node 到 Postgres DB 的查询不是 UTF8

    对于一个项目 我确实必须用 JS Node 编写一个服务器 该服务器从 Windows 计算机上的数据库 Postgres 返回元素 一切都 工作正常 连接正常并且返回元素 但是 我确实遇到了编码问题 我的元素是法语的 因此 服务器无法正确
  • 如何在 CasperJS 中禁用 css?

    我知道如何禁用图像和插件 但 CasperJS 中似乎没有禁用 css 的明显选项 有人知道这是如何运作的吗 假设您想禁止加载所有外部样式表 您可以通过中止加载 css 文件的请求来实现 这是通过将函数分配给options onResour
  • Bootstrap 4 导航链接悬停效果

    我试图仅针对导航栏中的 a 链接 而不是正斜杠 放置悬停效果 但我似乎无法只访问 a 链接 效果最终会沿着整个导航栏运行 这里似乎与 Bootstrap 4 有冲突 HTML
  • “区域”之间的 ASP.NET MVC `Html.ActionLink`

    我已向我的 MVC3 项目添加了一个新区域 并且我正在尝试从 Layout 页面链接到新区域 我添加了一个名为 Admin 的区域 其中有一个控制器 Meets 我使用 Visual Studio 设计器添加区域 以便它具有正确的区域注册类
  • 如何使用.Net Core编写Linux守护进程

    我可以编写一个长时间运行的 CLI 应用程序并运行它 但我假设它不会满足人们对符合标准的 Linux 守护进程的所有期望 响应 SIGTERM 由 System V init 进程启动 忽略终端 I O 信号 etc https www p
  • 如何在apollo链接中返回错误响应?

    我在模式拼接中使用阿波罗链接作为访问控制层 我不太确定如果用户没有访问特定操作的权限 如何使链接返回错误响应 我知道这样的包graphql shield and graphql middleware但我很好奇是否可以使用 apollo li
  • Git:如何在预提交挂钩中重新暂存暂存文件

    我正在写一个 git 预提交钩子 该脚本可以重新格式化一些代码 因此它可以修改暂存文件 如何重新暂存所有已暂存的文件 如果没有pre commit hook上下文 你可以获取暂存文件的列表 https stackoverflow com q
  • exit().remove() 在节点离开视图时不会删除它

    我正在使用 d3js 相对于当前时间从右向左移动圆点 我有几个问题 1 exit remove 不起作用 节点一旦离开视图就不会被删除 2 圆圈的过渡有点跳跃 var circles g selectAll path circles dat
  • python/django 中 setattr 和对象操作之间的区别

    我有以下模型 class Ticket models Model title models CharField merged to models ForeignKey self related name merger ticket null
  • 如何使用 Google Tink 创建对称加密密钥?

    我有一个密钥 例如 thisist0psecret 我想将其用作对称加密 解密密钥谷歌 Tink 库 https github com google tink 我很困惑我无法做到这一点简单的事情 我可以生成new keys 使用各种模板AE
  • 将静态 JSON 添加到 Android Studio 项目

    我想将静态 JSON 添加到 Android Studio 项目中 然后可以在整个项目中引用它 有谁知道这样做的最佳方法 更详细地说 我想做的是 1 从 Google Places API 中提取数据 2 查找与静态 JSON 对象中的地点
  • rsync git 大存储库

    我正在尝试将 git 存储库克隆到我的本地计算机上 但它说 malloc failed 因为存储库太大了 有谁知道我可以用来复制目录的确切 rsync 命令 或者我还能做些什么来克隆一个大存储库 我尝试了 rsync 但出现以下错误 Inv
  • Google 云构建不替换 firebase 令牌的环境变量

    我有一个云构建触发器 尝试将我的应用程序推送到 firebase 托管 为此 我有一个加密的 env enc 文件 其中包含部署所需的 firebase 令牌 在构建过程中 我解密了该文件并尝试部署 但遇到了未经授权的消息 我尝试在部署脚本
  • Composer 自动加载文件夹中的多个文件

    我在最新的项目中使用作曲家并像这样映射我的函数 require require dev autoload psr 4 files src function test function php 我想文件夹函数中会有很多文件 例如 real f
  • UNIX系统中如何连接两个文件的列

    我有2个文件 每个文件有一列多行 每个文件的行是相同的 如何将两个文件的列连接在一起 以便最终结果文件具有来自 file1 和 file2 的两列 例如 文件1是 1 2 3 文件2是 a b c 预期输出是 1 a 2 b 3 c 只需使
  • 如何拖动旋转的 DragShadow?

    我用 ObjectAnimator 旋转了 TextView 如下所示 ObjectAnimator rotate ObjectAnimator ofFloat aRotatedTextView rotation 0f someAngle
  • 如何在Webfaction上部署Flask应用程序?

    有人知道如何在 Webfaction 上部署一个简单的 Flask 应用程序吗 我知道 Webfaction 支持 mod wsgi 并且我阅读了 Flask 网站上的指南 但我仍然无法使我的应用程序运行 有人有工作配置吗 UPDATE回答
  • SourceForge 的下载页面如何运作?

    在回答其他问题时 有人指出 SourceForge 的下载页面是通过添加隐藏的 来工作的 现在似乎不再是这样了 当前版本的下载页面是如何实现的 我想构建类似的东西 因为我认为 SF 的解决方案非常优雅 好吧 更准确地说 确实 最初的 问题