在远程Angular App中下载时Excel文件损坏

时间:2015-09-16 12:30:06

标签: javascript php angularjs excel

我有一段代码可以下载excel报告,这些报告在我的本地Web服务器上运行得非常完美,但在部署时,excel文件总是被损坏,代码示例如下:

AngularJS:

$scope.getExcelFile = function(dateFrom, dateTo){

 API.getExcelFile(dateFrom, dateTo).then(function(data){
    var blob = {
     data: [data.data],
      filename: 'ExcelFile.xlsx',
    options: {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    }
  }
  FileSaver.saveAs(blob);
});
}

API(JS):

this.getExcelFile= function(dateFrom, dateTo){
    var promise = $http({
        url: '/some/api/endpoint/' + dateFrom + '/' + dateTo,
        method:'GET',
       responseType: 'arraybuffer'
 })
    return promise;

PHP API - 注意我无法提供创建它的方式的所有代码,但我认为可以安全地说服务器/响应问题而不是文件构建因为它在当地工作正常..

 $excelFileName = "ExcelFile.xlsx";
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  header('Content-Disposition: attachment;filename="' . $excelFileName . '"');
  header('Cache-Control: max-age=0');
  $objWriter->save('php://output'); // Output to browser

我注意到的一点是,当我在chrome检查器中查看它时,远程响应在所有excel二进制文件之前有一个空行,在本地它没有这个。

非常感谢有关如何解决此问题的任何建议

1 个答案:

答案 0 :(得分:1)

相当令人尴尬的是,这是收盘后流线换行的结果?>在API顶部的配置脚本上。因此响应中的空白换行符。

理想情况下你不应该使用?>在PHP脚本的底部,这是一个遗留脚本。

(面掌)