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