1

我有一个脚本,在其中单击链接我需要下载服务器上临时文件夹中的 PDF 文件,我通过调用 AJAX 函数来做到这一点。该 AJAX 函数正在调用 struts 2 操作方法,该方法正在读取文件的内容并将其写入输出流。

现在的问题是临时文件夹中是否不存在该文件。那是抛出异常。所以我决定使用json来处理它。如果该文件存在于临时文件夹中。我正在将密钥映射到

jsonObject.put("exist", true)

如果临时文件夹中不存在该文件。我正在将密钥映射到

jsonObject.put("exist", false)

在 struts.xml 我用这种方式处理动作

<action name="DisplayStaticPdf"
        class="com.ui.DisplayStaticPdfAction">
<result name="success" type="json"/>
</action>

在脚本中我通过这种方式处理它

function downloadDoc(actionName){
            $.ajax({
            url: actionName,
            type: 'post',
            dataType: 'json',
            error: function(data) {
                if(data.exist!= null && data.exist == 'false'){
                    alert('The document you are trying to download does not exist at location.  Please make sure file exist .');
                }
            },
            success: function() {
            }
        });
     }

当文件不存在时,它会向我显示相同的警报。但是当文件不存在时,它什么也不做,也不会下载临时文件夹中的 pdf。

我的动作课看起来像->

String pdfFileName = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
String rawFileName = "abc.pdf";
String returnString = "fileNotExist";
jsonObject = new JSONObject();

ServletOutputStream out = response.getOutputStream();
response.setContentType("application/pdf");
URL url = new URL(fileURL);

URLConnection conn = url.openConnection();
if (conn.getContentLength() != 0 && conn.getContentLength() != -1)
{
  bis = new BufferedInputStream(conn.getInputStream());
  bos = new BufferedOutputStream(out);

  try
  {
    byte[] buff = new byte[2048];
    int bytesRead;
    while (-1 != (bytesRead = bis.read(buff, 0, buff.length)))
    {
      bos.write(buff, 0, bytesRead);
    }
    jsonObject.put("exist", true);
  }
  returnString = SUCCESS;
}
else
{
  jsonObject.put("exist", false);
  returnString ="fileNotExist";
}
return returnString;

希望你们能理解我的问题。无论我是否以正确的方式做这件事,任何人都请说明这一点。或者有没有其他简单的方法可以做到这一点

谢谢,
安基特

4

0 回答 0