javascript - 如何通过 Java Servlet 使用 anchor 标记允许多次下载?

标签 javascript html download anchor

我正在尝试从用户那里一键下载多个 pdf 文件(在 Chrome 中工作)。一旦用户单击相关按钮,就会触发 for 循环来查看需要下载多少文档,每个文档都需要一个下载对话框。在 for 循环中,我模拟每个 pdf 的点击(这是通过 javascript 的点击事件完成的)。

Java servlet 代码如下:

out.print("<a id='exportAchievement' style='display:none' href='" + tempFileName + "'download='" + pdfName + "'></a>");
out.print("<script>document.getElementById(\"exportAchievement\").click();</script>");

这对于一个 pdf 来说非常有效,但是一旦我执行两个或更多,那么弹出的每个对话框都会使用第一个 pdf(名称和实际 pdf 与第一个 pdf 相同)。

我检查了我的变量是否混淆了,但是通过使用上述代码之前和之后的打印输出,它表明变量是正确的。

我的假设是错误出现在浏览器端,因为当需要下载一份 pdf 时对话框会工作,但我很困惑。

相关的for循环如下:

// pdfs.length determines the number of pdf's to download
for (int j = 0; j < pdfs.length; j++) {
 if (pdfs[j].contains(".pdf")) {
  try {
   // build the path to the pdf
   achFile = sub.getPath() + "\\" + pdfs[j];
   // fills in relevant fields in the pdf
   if (PDFFill.fillPDF(achFile, student, user, context)) {
     String pdfName = student.getName() + "-" + achFile.substring(achFile.lastIndexOf("\\") + 1);
     String tempFileName = Protocol.ACHIEVEMENT_PATH + "/" + pdfName;
     out.print("<a id='exportAchievement' style='display:none' href='" + tempFileName + "' download='" + pdfName + "'></a>");
     out.print("<script>document.getElementById(\"exportAchievement\").click();</script>");
    } else {
      this.printWithNoty("Could not print PDF. " + achievement, "warning");
    }
   } catch (NullPointerException n) {
     System.out.println(n.getMessage());
   } catch (Exception ex) {
     ex.printStackTrace();
   }
  }
 }

最佳答案

这是因为您对所有元素使用单个id。 ID 是唯一的。如果您对所有内容都使用相同的 ID,则无法区分它们,因此您不能期望获得多个结果。

<a id='exportAchievement' ...>

您可以使每个元素的 ID 都是唯一的,然后它就应该可以工作。

关于javascript - 如何通过 Java Servlet 使用 anchor 标记允许多次下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433856/

相关文章:

javascript - 我的 javascript 代码中的 Python getattr 等效项?

c# - 使用 HAP 添加样式表

html - CSS url() 的 <base> 标签

css - 样式化 native Google Chrome 视频控件

asp-classic - IE下载问题

javascript - Angular 4 this.http.get(...).map 不是函数

javascript - JavaScript中如何检查字符串是否包含数字和特殊字符?

javascript - 检测用户何时接受下载文件

ios - iOS 自动下载文件

javascript - 通过位置设置的中心点旋转 Canvas 中的矩形