在文件下载响应时重新启用表单提交按钮

2024-04-03

这可能是一个非常简单的问题,但实际上我还没有看到很多这方面的搜索结果。

我在表单中有一个非常基本的提交按钮,它接受一些用户输入,并在服务器的临时目录中生成一个可下载文件,然后提示用户下载该文件,然后在提交时禁用该文件:

<form action="Home" method="post" onsubmit="Submit.disabled = true; return true;">
...
<input type="submit" name="Submit" value="Submit" id="Submit" />

我们需要将其禁用几秒钟,同时页面创建文件,然后提示用户下载它。创建文件后,它会在 SelectionServlet.java 中返回以下响应,以便浏览器可以下载此生成的文件,例如:

            if (Export.equals("PDF")){
                response.setContentType(".pdf");
                response.setHeader("Content-disposition", "attachment; filename="+Constants.FILE_NAME+".pdf");
                File dlFile = new File(Constants.FILE_LOCATION+".pdf");

                 // This should send the file to browser
                 OutputStream outStream = response.getOutputStream();
                 FileInputStream in = new FileInputStream(dlFile);
                 byte[] buffer = new byte[4096];
                 int length;
                 while ((length = in.read(buffer)) > 0){
                    outStream.write(buffer, 0, length);
                 }
                 in.close();
                 outStream.flush();
                 Export="HTML";
            }

文件准备好下载后,我想重新启用“提交”按钮,以便用户可以重新使用他们输入的表单数据(没有完成页面重定向,因为用户基本上只是选择进入的标准他们正在构建的文件,以及它的文件类型,“提交”按钮最终将我们带到一个 java web 连接,该连接连接到源并将各种文件类型构建到服务器的临时目录中以供用户下载) 。

我在 Chrome 中玩过,实际上我可以删除提交按钮上的禁用属性,然后再次单击该按钮,但使用不同的条件,并得到不同的结果。我不确定什么代码实际上可以做到这一点。


在文件下载的响应上设置 cookie,并让 JavaScript 定期检查 cookie。一旦文件下载准备好提供服务,Save As当对话框发生时,cookie 将可供 JavaScript 使用。为了确保在同一会话中跨多个浏览器窗口/选项卡正常工作,最好是在 JavaScript 中生成唯一令牌,将其作为请求参数传递到下载请求,并让 servlet 将其设置为 cookie 值。

基本上,这应该做:

<form action="Home" method="post" onsubmit="startDownload(this)">
   ...
   <input type="hidden" name="token" />
   <input type="submit" name="Submit" value="Submit" id="Submit" /> <!-- I'd rather rename and lowercase the ID/name. -->
</form>

使用此 JavaScript(当使用 jQuery 时,jquery-cookie 插件 https://github.com/carhartl/jquery-cookie可能有助于减少document.cookie冗长):

function startDownload(form) {
    var token = new Date().getTime();
    form.token.value = token;
    form.Submit.disabled = true;

    var pollDownload = setInterval(function() {
        if (document.cookie.indexOf("download=" + token) > -1) {
            document.cookie = "download=" + token + "; expires=" + new Date(0).toGMTString() + "; path=/";
            form.Submit.disabled = false;
            clearInterval(pollDownload);
        }
    }, 500);
}

在 servlet 中:

// Prepare download here.
// ...

// Once finished preparing, set cookie.
Cookie cookie = new Cookie("download", request.getParameter("token"));
cookie.setPath("/");
response.addCookie(cookie);

// Now stream download to response.
// ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在文件下载响应时重新启用表单提交按钮 的相关文章

  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • [对象窗口]是什么?

    谷歌翻译有一些书签可以让您一键翻译 例如 javascript var t window getSelection window getSelection document getSelection document getSelectio
  • Java文本输出中的UTF-8编码问题

    我一直致力于测试高棉语 Unicode Wordbreaker 的各种解决方案 高棉语单词之间没有空格 这使得拼写检查和语法检查变得困难 以及从旧高棉语转换为高棉语 Unicode 我得到了一些源代码 现在在线 http www white
  • Spring 非托管 bean 的依赖注入

    我有一个非托管的 JPA 域类 它是通过实例化的new操作员 UserAccount account new UserAccount userRepository save account In my UserAccount类 我有一个be
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • Mocha 测试对原生 ES6 模块的“esm”支持

    有一个很棒的帖子 使用 Mocha 和 esm 测试原生 ES 模块 https web archive org web 20220318155753 https alxgbsn co uk 2019 02 22 testing nativ
  • 如何从 JavaScript 中的 URL 中提取主机?

    捕获域直到结束字符 我需要一个捕获的正则表达式example com在所有这些中 example com 3000 example com pass gas example com example com 如果您确实有有效的 URL 那么这
  • 添加 sigma.js 导航按钮

    我是 javascript 和 sigma js 的新手 我试图让导航按钮在画布中向上 向下 向左 向右滚动 就像发现的那样here http jcml fr jacomyal osdc2012 demo 到目前为止 我有一个简单的例子 我
  • 为什么 useState 会导致组件在每次更新时渲染两次?

    我这里有一段简单的代码 import React useState from react import styles css export default function App const number setNumber useSta
  • 如何获取元素相对于当前屏幕位置的偏移量?

    我正在尝试用纯 Javascript 重构所有 jQuery 除了非常具体的值之外 一切都正常工作 根据此代码的浏览器供应商 我得到了不同的值 对于 jQuery 我会使用 var topSelected figure offset top
  • 包括来自raw.github.com的js

    我有一个 github com 演示页面 链接到https raw github com master file js https raw github com master file js这样我就不需要总是复制 js文件转移到gh pag
  • 自动将通配符导入重构为 IntelliJ 中的显式导入(适用于 Scala/Java)

    考虑下面的代码 是否可以让 IntelliJ 自动将每个通配符导入重构为显式导入 无论范围内使用什么 例如import scalatags JsDom all into import scalatags JsDom all ol li di
  • RegisterClientScriptCode 在部分回发后不起作用

    以下代码行位于 SharePoint 网站的用户控件中 ScriptManager RegisterClientScriptBlock this this GetType jquery144 false ScriptManager Regi
  • Web 服务返回 java.lang.reflect.InitationTargetException

    我在向 java web 服务发出请求时收到上述消息 我们最初创建了一个 Java 控制台应用程序并手动提交了一个 xml 文件 当将其作为 Java 应用程序运行时 将使用 System out println 成功创建并显示响应 我们通
  • Angular 计算 HTML 中的百分比

    我试图在 HTML 中显示百分比值 如下所示 td myvalue totalvalue 100 td 它可以工作 但有时它会给出一个很长的小数 这看起来很奇怪 如何四舍五入到小数点后两位 有更好的方法吗 您可以使用过滤器 如下所示杰夫约翰
  • 如果垃圾收集器没有删除未引用的对象,它们还能运行吗?

    如果一个对象正在等待垃圾收集 但包含一个在该对象的最后一个引用更改时正在运行的线程 那么该线程是否仍会运行并且代码是否仍会执行 那么您是否可能有一堆应该删除的幽灵对象 但它们对您的代码产生了影响 你如何防止这种情况发生 有没有办法让对象知道
  • gulp-uglify 不会保留文件顺序

    当我使用吞咽丑化 https github com terinjokes gulp uglify为了缩小 Javascript 文件 顺序变得混乱 可以说我让这个任务按预期工作 var gulp require gulp var renam
  • Google Hangouts 扩展程序如何创建面板窗口?

    The Doc http code google com chrome extensions windows html说如果你想创建一个面板窗口 你应该使用 chrome windows create type panel function
  • java 更新进度条

    我有一个 JFrame 和以下组件 JButton jButton1 Progress Bar ProgressBar 及其公共静态 JLabel 状态及其公共静态 单击按钮时会执行不同的语句 我想在每个语句后更新我的进度条 这是我的代码

随机推荐

  • 创建自动调整大小的打印输出

    我的应用程序需要打印一些东西 布局应该有点动态 有时特定字段可能包含更多数据 这可能需要它们自动换行或类似的 但打印输出不应超过一页 如果数据太多 我想稍微减小字体大小 然后重试 然后重复 直到所有内容都适合一个页面 永远不会so许多数据的
  • CR 与 LF perl 解析

    我有一个 perl 脚本 它解析一个文本文件并将其每行分解为一个数组 当每行以 LF 终止时它工作正常 但当它们以 CR 终止时我的脚本无法正确处理 我该如何修改这一行来解决这个问题 my allLines split entireFile
  • 检查用户是否已连接 AppleWatch,而不提示手表

    我们正在使用谷歌分析 并想知道我们有多少用户拥有苹果手表 我在 Stack 中搜索了答案 反复出现的答案是使用这个 if WCSession isSupported check if the device support to handle
  • MySQL外键允许NULL吗?

    我正在拼凑一个图像网站 基本模式非常简单 MySQL 但我在尝试表示与图像关联的可能的管理标志 不适当 受版权保护 等 时遇到了一些麻烦 我目前的想法如下 tblImages imageID INT UNSIGNED NOT NULL AU
  • Java 夏令时不适用于遥远的过去(更新:确实如此)?

    下面这段代码 TimeZone getTimeZone Europe Athens inDaylightTime new Date 200 8 14 returns true 与 2011 年的情况非常相似 但是 夏令时 https en
  • 如何使用 Eclipse JDT ASTParser 获取方法的类名?

    我想做的是获取方法的类名 例如 我想获得一类 直到 和 搜索 方法 这是代码 Query query new Query queryStr until dateStr QueryResult queryResult twitter1 sea
  • 使用 WSL 2 进行 GPU 加速

    我正在尝试设置张量流以在运行 Ubuntu 20 04 的 WSL 2 上使用 GPU 加速 我正在跟进本教程 https ubuntu com blog getting started with cuda on ubuntu on wsl
  • 使用google data fusion连接mysql失败

    我无法从 google data fusion 连接到 MySQL 步骤 首先 我添加连接器https dev mysql com downloads file id 462850 https dev mysql com downloads
  • 用于嵌入 flashplayer 的 swfobject 的替代方案

    有谁知道 swfobject 是否有更好的替代品 我实际上很喜欢 swfobject 我只是想听听是否有人找到更好的东西 或者也许这是最好的方法 如果您不知道 swfobject 您可以在这里找到它 http code google com
  • 如何利用 Numpy(或其他 Python 解决方案)中外积的对称性?

    假设我们要计算向量与其自身的外积 import numpy as np a np asarray 1 1 5 2 2 5 3 A np outer a a print A 结果是 1 1 5 2 2 5 3 1 5 2 25 3 3 75
  • Rjson读取大Json错误

    我正在尝试将 2 4GB json 文件读入 R 但是 似乎使用常规方法不起作用 错误如下 我能做些什么 Error in paste readLines file warn FALSE collapse The result will e
  • sbt 目录结构中非托管 jar 的 lib 目录在哪里?

    我正在尝试将 jar 文件添加到 sbt 项目中 但我不知道将它们存储在哪里 sbt 文档说 只需将它们放入 lib 文件夹中 就可以了 但没有提供任何有关实际放置此 lib 文件夹的位置的信息 lib文件夹是否在src下 在 src 文件
  • 如何为 JavaScript 数组中的每个对象动态添加属性

    我试图循环遍历对象数组 为每个对象添加属性和值 表的顺序很重要 因为我试图使用可手动视图作为客户端来检索服务器端 mysql 表的内容 我希望 Handsontable 视图具有与表相同的列顺序 但我想插入一个复选框列作为第一列以允许记录选
  • 有人知道如何在Python中打开/关闭大写锁定吗?

    我试图在按住两个 Shift 按钮一秒钟时打开 关闭大写锁定 我尝试过使用 virtkey 模块 但它不起作用 不过 该模块确实适用于其他键 所以我认为我没有错误地使用该模块 有人有办法做到这一点吗 需要明确的是 我想要实际打开 关闭大写锁
  • Twitter-Bootstrap - 将简单元素内联

    有没有办法放2 a 元素显示内联 我试过 div class form inline a jjj a a sss a div and also div class row fluid a class inline jjj a a class
  • 有没有一个插件可以在我的网页中显示 HTML 代码

    我想在我的页面中显示大块 LESS 文件 我希望它看起来尽可能漂亮 以便看到它的用户能够轻松阅读 stackoverflow 让我像这样显示它 例如 header color red div myClass color blue 但是有没有
  • 如何用C#打印存储在本地硬盘上的文件?

    我在 C WinForms 中创建了一个函数 它将文件作为 gif 图像保存在本地目录中 如何访问它并将其发送到我的一台网络打印机进行打印 我现在这里有这段代码 internal void PrintLabels string printe
  • 使用 OCaml Graphics 实际更改文本大小

    我想知道如何在 OCaml 中设置文本大小 我试过Graphics set text size我想这应该可以达成交易 但无论我把set text size 200 or set text size 20并没有改变什么 Graphics se
  • 查找数字数组中两个最近元素之间的距离

    所以我正在自学我购买的这本书中的算法 并且我有一个伪代码用于查找数字数组中两个最近元素之间的距离 MinDistance a 0 n 1 Input Array A of numbers Output Minimum Distance be
  • 在文件下载响应时重新启用表单提交按钮

    这可能是一个非常简单的问题 但实际上我还没有看到很多这方面的搜索结果 我在表单中有一个非常基本的提交按钮 它接受一些用户输入 并在服务器的临时目录中生成一个可下载文件 然后提示用户下载该文件 然后在提交时禁用该文件