我有一段代码可以下载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二进制文件之前有一个空行,在本地它没有这个。
非常感谢有关如何解决此问题的任何建议
答案 0 :(得分:1)
相当令人尴尬的是,这是收盘后流线换行的结果?>在API顶部的配置脚本上。因此响应中的空白换行符。
理想情况下你不应该使用?>在PHP脚本的底部,这是一个遗留脚本。
(面掌)