为什么AJAX输出带有错误的编码?

时间:2016-02-04 21:12:12

标签: javascript ajax

我从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');

0 个答案:

没有答案