AngularJS $http-post - 将二进制文件转换为 excel 文件并下载

如何解决AngularJS $http-post - 将二进制文件转换为 excel 文件并下载

只是注意到由于 IE8/9 而无法使用它,但我还是会推送提交……也许有人觉得它有用

这实际上可以通过浏览器完成,使用blob. 注意 Promise 中的responseType和 代码success

$http({
    url: 'your/webservice',
    method: "POST",
    data: json, //this is your json data string
    headers: {
       'Content-type': 'application/json'
    },
    responseType: 'arraybuffer'
}).success(function (data, status, headers, config) {
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}).error(function (data, status, headers, config) {
    //upload failed
});

虽然它存在一些问题,例如:

  1. 它不支持IE 8 和 9
  2. 它会打开一个弹出窗口以打开objectUrl可能被阻止的人
  3. 生成奇怪的文件名

它确实奏效了!

斑点 我测试过的 PHP 中的服务器端代码如下所示。我确定您可以在 Java 中设置类似的标头:

$file = "file.xlsx";
header('Content-disposition: attachment; filename='.$file);
header('Content-Length: ' . filesize($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
echo json_encode(readfile($file));

编辑 20.04.2016

浏览器使以这种方式保存数据变得更加困难。一个不错的选择是使用filesaver.js。它为 提供了一个跨浏览器的实现saveAs,它应该替换success上面 Promise 中的一些代码。

解决方法

我在 Angular JS 中创建了一个应用程序,用于通过 $http post 下载 Excel 工作簿。

在下面的代码中,我以 JSON 的形式传递信息,并通过有角度的 $http 帖子将其发送到服务器 REST Web 服务 (java)。Web 服务使用来自 JSON 的信息并生成 Excel 工作簿。在 $http post 的成功正文中的响应中,我在该数据变量中获取二进制数据,但不知道如何将其转换并下载为 Excel 文件。

谁能告诉我一些将二进制文件转换为 Excel 文件并下载的解决方案?

我的代码如下所示:

$http({
        url: 'myweb.com/myrestService',method: "POST",data: json,//this is your json data string
        headers: {
           'Content-type': 'application/json'
        }
    }).success(function (data,status,headers,config) {

        // Here i'm getting excel sheet binary datas in 'data' 

    }).error(function (data,config) {

    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?