刚刚加载Chrome中的CSV下载文件

时间:2018-07-31 04:21:14

标签: angularjs symfony csv

因此,我正在使用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,以便开始下载。我不会在响应标签上编码响应。

我在这里错过了什么吗?我该怎么办?

谢谢!

0 个答案:

没有答案