亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

下載 CSV 文件的流響應

下載 CSV 文件的流響應

PHP
慕的地8271018 2021-11-19 15:14:06
我正在嘗試從服務器流式傳輸大型 CSV。我加載一個 JSON 文件,將其轉換為數組,然后將其作為 CSV 進行處理。從前端,我通過單擊按鈕調用以下內容downloadCSVData() {    axios({        url: '/downloadCSVData',        method: 'GET'    }).then((response) => {        console.log(response)    });}然后這個函數執行以下操作public function downloadCSVData(){    //load JSON file    $data = file_get_contents($file_path, true);    //Convert file to array    $array = json_decode($data, true);    $headers = [        'Cache-Control'       => 'must-revalidate, post-check=0, pre-check=0'        ,   'Content-type'        => 'text/csv'        ,   'Content-Disposition' => 'attachment; filename=galleries.csv'        ,   'Expires'             => '0'        ,   'Pragma'              => 'public'    ];    $response = new StreamedResponse(function() use($array){        // Open output stream        $handle = fopen('php://output', 'w');        // Add CSV headers        fputcsv($handle, array_keys($array['element'][0]), ',');        foreach ($array['element'] as $key => $row) {            fputcsv($handle, $row);        }        // Close the output stream        fclose($handle);    }, 200, $headers);    return $response->send();}現在在前端,在控制臺中,我可以看到按照需要的方式打印響應。然而,根據我的理解,后端應該觸發要下載的文件,而這并沒有發生。我在這里遺漏了什么,如何將其作為物理文件下載到前端?
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

如果您直接訪問了 URL,您的 PHP 設置應該可以強制下載。但是你已經在一個完全加載的 HTML 頁面中,所以你需要使用這個<iframe>技巧來下載文件。這將允許瀏覽器接收傳入的數據,就像您打開了一個新的瀏覽器窗口一樣。


嘗試將您的下載功能更改為:


downloadCSVData() {

    $('<iframe />')

        .attr('src', '/downloadCSVData')

        .hide()

        .appendTo('body');

}


查看完整回答
反對 回復 2021-11-19
  • 1 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號