无法使用Angular JS和spring MVC打开下载文件
Cannot open a download file with Angular JS and spring MVC
我正在我的网站上实现一个函数,并使用Angular JS。我已经在服务器端上实现了导出文件的服务。在客户端,我创建了一个"EXPORT OPTION",然后当用户单击该按钮时,用户可以下载该文件(从服务器端的服务导出),并将其自动保存在本地机器的下载文件夹中。我是从这个问题的"极端"答案中得出这个想法的:如何使用AngularJS并调用MVC API下载文件?
一切都做得很好,但是,当我打开保存到下载文件夹中的文件时,显示了一条错误消息:"Excel无法打开文件"filename.xlsx",因为文件扩展名的文件格式无效。请验证文件是否已损坏,以及文件扩展名是否与文件的格式匹配。"
我相信问题来自客户端,因为当我在服务端运行服务(用于导出文件)时,文件被正确创建和打开,没有任何错误。我一直在调查这个问题,然后我发现问题应该来自文件路径".xlsx".
以下是用于在服务器端导出文件的java代码:
@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,基本上是:
response.addHeader("内容处置","附件;filename=report.xls");
在您的代码处,替换这行代码:
fName = "C:''LOCAL''FILE_" + "[" + m + "]" + "[" + y + "]" + ".xlsx";
带有:
fName = "C:''LOCAL''FILE_" + "[" + m + "]" + "[" + y + "]" + ".xls";
相关文章:
- 如何在生成下载文件时显示加载动画
- 直接下载文件,而不是从window.open(url)
- 如何使用javascript或html下载PDF格式的填写表单
- Javascript运行php文件,然后下载文件
- 在单击href链接的同时下载文件
- 无法使用Angular JS和spring MVC打开下载文件
- 从 MVC 下载文件
- 从mvc web api httpresponse生成csv,并通过angularjs接收下载
- BundleConfig.cs不会在MVC应用程序中下载Breeze.js ASP.NET
- 在 Spring-MVC 中创建下载链接
- 如何将 JavaScript 数组发布到 MVC 3 控制器操作(由于文件下载而没有 AJAX)
- 使用AngularJS和$http.post在MVC应用程序中下载文件
- MVC ActionResult调用文件下载时mouseup上的图像损坏
- MVC Asp.net zip文件下载
- 使用spring mvc和apache pdf框从UI下载的空和破碎的pdf文件
- Asp.net MVC 4下载PDF不工作
- 如何下载图像(显示保存对话框在浏览器中),这是在html2canvas从控制器在MVC创建的字节的形式
- MVC淘汰.儿童下载列表没有't第一时间加载模型数据
- 从下载CloudBlockBlob作为可保存文件到浏览器.Net MVC 6
- 在 MVC 4 中以 zip 文件下载 pdf 文件