Javascript 无法使用Angular JS和spring MVC打开下载文件
我正在我的网站上实现一个功能,并使用Angular JS。我已经在服务器端实现了导出文件的服务。在客户端,我创建了一个“导出选项”,当用户单击该按钮时,用户可以下载文件(从服务器端的我的服务导出)并自动将其保存在本地计算机的下载文件夹中。我从这个问题的答案“tremendows”中得到了这个想法: 一切都做得很好,但是,当我打开保存到下载文件夹中的文件时,显示了一条错误消息:“Excel无法打开文件“filename.xlsx”,因为文件扩展名的文件格式无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配” 我相信问题来自客户端,因为当我在服务端运行服务(用于导出文件)时,文件被正确创建和打开,没有任何错误。我一直在调查问题,然后我发现问题应该来自文件路径“.xlsx” 以下是用于在服务器端导出文件的java代码:Javascript 无法使用Angular JS和spring MVC打开下载文件,javascript,java,angularjs,excel,spring,Javascript,Java,Angularjs,Excel,Spring,我正在我的网站上实现一个功能,并使用Angular JS。我已经在服务器端实现了导出文件的服务。在客户端,我创建了一个“导出选项”,当用户单击该按钮时,用户可以下载文件(从服务器端的我的服务导出)并自动将其保存在本地计算机的下载文件夹中。我从这个问题的答案“tremendows”中得到了这个想法: 一切都做得很好,但是,当我打开保存到下载文件夹中的文件时,显示了一条错误消息:“Excel无法打开文件“filename.xlsx”,因为文件扩展名的文件格式无效。验证文件是否已损坏,以及文件扩展名
@RequestMapping(value = "/exportFile", method = RequestMethod.GET)
public String exportHRSalaryByAcc(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "month", defaultValue = "") String month) throws IOException, GeneralSecurityException, InvalidFormatException{
String rs = FALSE;
response.addHeader("Access-Control-Allow-Origin", "*");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//response.setContentType("application/x-felix; charset=us-ascii");
response.setHeader("Content-Transfer-Encoding", "7bit");
String fName = null;
Calendar cal = Calendar.getInstance();
int m = 0;
try {
if(StringUtils.isNotEmpty(String.valueOf( month)) || StringUtils.isNotEmpty(String.valueOf( year))){
if (DateUtils.isValidFormatver2(Integer.parseInt(month), Integer.parseInt(year))) {
m = Integer.parseInt(month);
fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xlsx";
// CREAT FILE
rs = eService.runExportDataHRSalay(m, fName);
} else {
return ErrorMessage.FILE_MESS;
}
} else {
m = cal.get(Calendar.MONTH) + 1;
fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + ".xlsx";
rs = eService.runExportDataHRSalay(m, fName);
}
} catch (Exception e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + fName);
return rs;
}
以下是客户端的代码,我使用了angularjs:
.....
month = currentTime.getMonth() + 1;
var check = confirm("Are you sure to run the data ?");
if(check == true){
$http({
url : www.serviceFromServerSide.abc/exportFile,
method : 'GET',
headers : {
'Content-type' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
},
responseType : 'arraybuffer'
}).success(function(data, status, headers, config) {
var file = new Blob([ data ], {
type : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
//trick to download store a file having its URL
var fileURL = URL.createObjectURL(file);
var a = document.createElement('a');
a.href = fileURL;
console.dir(fileURL);
a.target = '_blank';
a.download = 'FILE__' + '[' + month + ']'+ '.xlsx';
document.body.appendChild(a);
a.click();
$("#loadingImage").css("display", "none");
$("#backgroundPopup").fadeOut(400);
}).error(function(data, status, headers, config) {
});
}else{}..........
请帮我解决这个问题,因为这个我真的很累。谢谢大家,很抱歉解释得不好。我也有同样的问题,我用.xls替换了.xlsx,基本上: addHeader(“内容处置”、“附件”; 文件名=report.xls”) 在代码处,替换这一行代码:
fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xlsx";
与:
fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xls";