因此,我正在使用Symfony的响应和AngularJs(1.6)进行CSV下载。 但是,当我尝试下载文件时,它会继续加载到chrome下载栏上,并且会不断增加大小(实际大小应仅为4KB)。我在Mozilla上进行了测试,并且可以正常工作。因此,该错误可能是在Chrome上。我在Chrome上有67.0.3396.87版。
这就是我在Symfony上实现它的方式:
private function createChunkedResponse()
{
$contents = $this->response->getBody()->getContents();
$tmpFile = tmpfile();
fwrite($tmpFile, $contents);
$metaData = stream_get_meta_data($tmpFile);
$resource = fopen($metaData['uri'], 'r');
$stream = Psr7\stream_for($resource);
$response = new StreamedResponse(function () use ($stream) {
while($stream->isSeekable()) {
echo $stream->read(1024);
$stream->seek(1024);
}
});
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment;filename="Bets'. date('Ymd') .'.csv"');
$response->headers->set('Content-Length', $stream->getSize());
fclose($tmpFile);
return $response;
}
请注意,$ this-> response是Guzzle的响应对象。
这是我在AngularJS上实现它的方式:
exportToCSV(payload) {
const mergedPayload = Object.assign({id: this.SessionService.get('brokerageSyncId')}, payload);
const queryParams = this.HttpService.buildQueryParamsFromPayload(mergedPayload);
let url = environment.API_URL + `/brokerage/export-bets?${queryParams}`;
window.location.assign(url);
}
请注意,我只是在AngularJS中打开URL,以便开始下载。我不会在响应标签上编码响应。
我在这里错过了什么吗?我该怎么办?
谢谢!