如果下载失败,30 秒后关闭 BufferedOutputStream 输出

Close BufferedOutputStream output after 30 seconds if download fails

单击“下载”后,我的代码开始在新打开的选项卡中从 SAN 位置写入内容 window,完成后,将 PDF 下载到本地系统。如果文件在 30 秒内最多 writes/downloaded,我想关闭新选项卡 window。然后在父 window JSP 上显示一条短信。我的 servlet 代码如下:

    try
    {   
        GetPDAO getPDAO= new GetPDAO();

          for(int i=0;i<5;i++)
          {
              content=getPDAO.getPFromE( strPN);
               DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
               Date dateobj = new Date();
               if(content==null) 
              {  
               Thread.sleep(5000);
               }
             else {

                 content=getPDAO.getPFromE( strPN);
                 break;
             }
          }
        response.setContentType("application/pdf");
        String strFileName=strPN+".pdf";
        response.setHeader("Content-Disposition","attachment; filename=\"" + strFileName + "\"");
        response.setHeader("Cache-Control","no-cache"); 
        response.setHeader("Cache-Control","no-store"); 
        response.setHeader("Pragma","no-cache");
        response.setDateHeader("Expires", 0);
        output =new BufferedOutputStream(response.getOutputStream());
        output.write(content); 
        output.flush();          
        } 
    finally 
     {
        output.close(); 
      }

和我的 JSP 代码如下:

function onSubmit()
{    
var url="<%=strCCPURL%>"+"/getpfromeservlet?PN="+document.getElementById("pn").value; 
       document.getElementById('alrt').innerHTML='<b>Please wait</b>'; 
           setTimeout(function() {document.getElementById('alrt').innerHTML='';},8000);
            window.open(url,"_blank");
           document.getElementById('viewPD').href=url;
           document.getElementById('viewPD').target='_blank';            
}

您可以使用 sendRedirect 从您的 servlet 到您的 JSP 的副本,然后自动关闭 JSP。 sendRedirect 将关闭 servlet,然后副本 JSP 将通过 window.close 方法关闭。焦点回到你的主 JSP.