Struts 2 + JSON + AJAX pdf下载问题

时间:2012-09-27 04:58:56

标签: json jquery struts2

我有一个脚本,其中点击链接我需要下载服务器上临时文件夹中的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。

我的动作类看起来像 - &gt;

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;
希望你们明白我的问题。无论我是采用正确的做法,还是请注意这一点。或者还有其他简单的方法吗

谢谢,
ANKIT

0 个答案:

没有答案