我有一个NG-GRID,其中填充了数据。 用户选择一些行并尝试导出它。在导出的报告中只能看到那些行。
正在进行的方法/设计是:
调用servlet的函数返回接收的数据。 下面是在ng-click()上调用的下载函数 下载数据servlet正在创建文件并在响应中写入文件和标题的数据。
$ scope.download = function(){ $ scope.downloadText =“准备文件......”; $ scope.isDownloadDisabled = TRUE; return($ http.post('./ DownloadData',mySelections).success( 功能(数据,状态,标题,配置) { $ scope.downloadText = “下载”; $ scope.isDownloadDisabled = FALSE; console.log(“我在这里”) 返回数据; }) ); }
但我没看到的是下载的数据。虽然标题是正确的。
以下是在服务器上执行的功能代码:
private void processData(HttpServletRequest request, HttpServletResponse response) throws ServletException
{
try
{
Map<String, Map<String, String>> loadedData = getTableDataForRequest(request);
if (loadedData == null || loadedData.size() == 0)
{
log.error("Exception no data generated for exporting");
throw new ServletException();
}
else
{
XLSDataWriter xlsDataWriter = new XLSDataWriter(loadedData);
String pathToGeneratedFile = getServletContext().getRealPath("resources");
pathToGeneratedFile = pathToGeneratedFile.substring(0, pathToGeneratedFile.indexOf("resources"));
pathToGeneratedFile += "generatedFiles" + File.separator;
File file = xlsDataWriter.writeDataToXls(pathToGeneratedFile);
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-disposition", "attachment; filename=" + file.getName());
OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
FileInputStream inStream = new FileInputStream(file);
while ((bytesRead = inStream.read(buffer)) != -1)
{
outStream.write(buffer, 0, bytesRead);
}
inStream.close();
log.info("Full file path : " + file.getAbsolutePath());
}
}
catch (Exception ex)
{
log.error("Exception while fetching the download data", ex);
}
}
请帮助我已经被困在这里很多天了。
答案 0 :(得分:0)
好的,这就是我为解决问题所做的工作。
在angular。函数内创建了一个链接。
将href属性分配给servlet,该servlet通过传递myselection的变量来返回附件文件。
执行点击动作。
$scope.downloadText="Downloading...";
$scope.isDownloadDisabled=true;
var servletPath = './DownloadData?JSON='+JSON.stringify(mySelections);
var downloadLink = angular.element('<a></a>');
downloadLink.attr('href',servletPath);
downloadLink[0].click();
$scope.downloadText="Download";
$scope.isDownloadDisabled=false;