问题描述:
用AJAX的post请求实现一个下载功能,当所要下载的文件不存在时,前台返回页面无响应,部分代码如下:
前台:
Controller:
(Controller中130行处file路径下的文件不存在,所以程序会跳到149行的catch方法中,并给前台返回一个下载失败的信息)
前台界面在浏览器中的显示:
我们可以看到前台界面没有接收到后台传来的信息。
问题产生原因:
去网上查阅了一些相应资料,产生这个问题的原因是下载请求不可以放在AJAX中。
解决办法:
在前台先用ajax发请求去判断文件是否存在,如果不存在,则给出相应的提示,如果存在则执行后面请求中的下载操作,部分修改代码如下:
前台:
function downXbrl(type){
var rows = $('#dg').datagrid('getSelections');
if(rows.length!=1){$.messager.alert('消息提示','请选择一个要生成报送文件的单号!','error');return ;}
var flag = false;
$.ajax({
type: "post",
url: "${pageContext.request.contextPath}/TxReportInfo/checkDownXbrl.do",
data: {"reportId": rows[0].reportId,"reportType": rows[0].reportType,"type": type},
async: false,
success: function(result){
if (result.success){
flag = true;
}else{
jsutil.msg.alert(result.errorMsg);
}
}
});
if(flag){
location.href = '${pageContext.request.contextPath}/TxReportInfo/downXbrl.do?reportId='+rows[0].reportId+"&reportType="+rows[0].reportType+"&type="+type;
}
}
Controller:
@RequestMapping(path="/downXbrl")
public void downLoad(HttpServletRequest request,HttpServletResponse response,TxReportInfoDTO dto) throws IOException{
String path = Config.getProperty("uploaddir")+Config.getProperty("downloaddir");
String xmlName = "";
if("0".equals(dto.getType())){
xmlName = "_q";
}else if("1".equals(dto.getType())){
xmlName = "_new";
}else if("2".equals(dto.getType())){
xmlName = "_old";
}else{
System.out.println("Type类型为空!");
}
String file = path + dto.getReportId() + xmlName + ".xml";
String fileName = file.substring(file.lastIndexOf("/") + 1, file.length());
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));
bis = new BufferedInputStream(new FileInputStream(file));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] by=new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(by,0,by.length))){
bos.write(by, 0, bytesRead);
}
bis.close();
bos.flush();
bos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
bis.close();
bos.close();
}
}
@RequestMapping(path="/checkDownXbrl")
@ResponseBody
public InvokeResult checkdownload(TxReportInfoDTO dto){
String path = Config.getProperty("uploaddir")+Config.getProperty("downloaddir");
String xmlName = "";
if("0".equals(dto.getType())){
xmlName = "_q";
}else if("1".equals(dto.getType())){
xmlName = "_new";
}else if("2".equals(dto.getType())){
xmlName = "_old";
}else{
System.out.println("Type类型为空!");
}
String file = path + dto.getReportId() + xmlName + ".xml";
File checkFile = new File(file);
if(!checkFile.exists()){
return InvokeResult.failure("请先生成报送文件!");
}
return InvokeResult.success();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131311.html