代码之家  ›  专栏  ›  技术社区  ›  Wai Yan Hein

从Laravel后端使用Axios下载Excel数据不起作用

  •  0
  • Wai Yan Hein  · 技术社区  · 6 年前

    这是我的Laravel API控制器操作方法。

    function downloadExcel(Request $request)
    {
        //other code goes here
        return Excel::create($left_photo->id . "-" . $right_photo->id, function($excel) use ($excel_data)
            {
    
                // Set the spreadsheet title, creator, and description
                $excel->setTitle('Mapping points');
                $excel->setCreator('Laravel')->setCompany('Memento');
                $excel->setDescription('Mapping points file');
    
                // Build the spreadsheet, passing in the payments array
                $excel->sheet('sheet1', function($sheet) use ($excel_data)
                {
                    $sheet->fromArray($excel_data, null, 'A1', false, false);
                });
    
            })->download('xlsx');
    }
    

    我使用这样的Axios从react js应用程序获取数据。

    export const getHttpClientFileDownload = (path) => {
      let accessToken = localStorage.getItem("access_token");
      return Axios({
        url: getApiBaseEndpoint() + path,
        method: 'GET',
        responseType: 'blob', // important
        headers : { 'api-version': API_VERSION, 'Authorization': 'Bearer ' + accessToken }
      })
    }
    
    exportExcel()//this is the download medthod in the component
        {
            let path = 'photos/matching-points/excel?left_photo_id=' + this.props.leftImageId + "&right_photo_id=" + this.props.rightImageId;
            //let path = "curator/event/" +this.props.match.params.id + "/details";
            getHttpClientFileDownload(path)
            .then((response) => {
                alert('Everything is alright')
            })
        }
    

    正如您在上面的代码中所看到的,如果请求成功,它应该会提示一条消息,“一切正常”。但它并没有发出警报。但在浏览器中,它是成功的。

    enter image description here

    当我向只返回普通JSON响应的链接发出请求时,它会按预期向消息发出警报。只是当我向前面提到的Excel API发出请求时,它没有按预期工作。

    我无法使用直接下载链接,因为我正在服务器端进行一些授权。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mako    6 年前

    您只需使用window.open(path)下载文件