我从AJAX(Angular)服务器获取文件。该文件是一个简单的XLSX document
,发送方式如下:
ob_start();
$file = \PHPExcel_IOFactory::createWriter($xls, 'Excel2007');
$file->save('php://output');
$response->setContent(ob_get_clean());
$response->headers->replace(array(
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'Content-Disposition' => 'attachment;filename=file.xlsx"'
));
当我从前端发出请求时,我也使用Accept标头。然后我使用FileSaver.js和Blob.js使用angular-file-saver保存文件。 但收到的文件已损坏,我无法在Excel中打开它:它的大小是(例如)12446字节,但Chrome的DevTools网络选项卡显示响应Content-Length标头为7141字节。
我该如何解决这个问题?
UPD: 我发送的请求是这样的:
$http.get(baseURL + '/' + entity + '/export/?' + condition + sort, {
headers: {'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'}
});
并按如下方式下载文件:
var data = new Blob([response.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'});
FileSaver.saveAs(data, 'file.xlsx');