使用angularjs向浏览器发送servlet响应(下载功能)
Send servlet response to browser using angularjs (DOWNLOAD FEATURE)
我有一个NG-GRID,用于填充数据。用户选择一些行并尝试导出。在导出的报表中只能看到这些行。
我正在做的方法/设计是:
- 将选定的行值发送到服务器
- 被调用的servlet从客户端获取行信息,并处理XLS文件,作为响应,为要下载的文件添加文件和头的所有详细信息
-
调用servlet的函数返回接收到的数据。下面是ng-click()上调用的下载函数下载数据servlet正在创建文件,并在响应中写入文件和头的数据。
$scope.download=函数(){$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);
}
}
请帮帮我,我已经陷入困境很多天了。
好的,这是我为解决这个问题所做的。
创建了角度函数内部的链接。
将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;
相关文章:
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 使用ajax响应下载一个zip文件
- 将非公共文件作为附件作为响应发送(下载非公共文件)
- 响应式设计:这个Javascript会导致浏览器下载两个图像吗?
- 在响应文件下载时重新启用表单提交按钮
- 如何使用来自服务的响应下载 pdf
- 如何在反应中下载获取响应作为文件
- 下载通过 nodejs 响应 POST 请求而发送的文件
- 从http响应主体下载一个文件
- 使用Addon SDK API下载许多文件时,Firefox UI变得没有响应
- AngularJs响应动态下载
- 采用响应式设计,避免移动客户端下载大图像
- Ajax响应是一个文件下载
- 拖动&在Safari iOS上下载:赢得't拖动,赢得'在台式机/iPad上没有响应
- 在node.js中设置下载响应的文件名
- 响应下载
- 响应没有给出任何输出来下载PDF
- 如何将Ajax响应作为可下载文件发送到web浏览器客户端
- 在下载文件出错的情况下,管理表单提交上的JSON服务器响应
- 从ajax响应下载pdf文件