向Laravel发出POST请求,然后将字符串下载为文件


POST request to Laravel then download string as a file

我有一个ajax POST请求被发送到laravel控制器,这很好。我在控制器中做了一些工作,得到了一个大小从几百千字节到几百兆字节不等的字符串。

我想把这个字符串作为一个文件下载,我一直在尝试各种方法,但问题是,每当我使用return将字符串传递到不同的控制器或不同的页面时,它都会将输出返回到ajax成功。我试过消除成功,但仍然没有成功。

            /*POST request*/
            $.ajax({
                type:"post",
                url:"{{ URL::route('sshDownload') }}",
                data: {
                    id:id
                    file:file,
                    status:"logfile"
                },
                success:function(data){
                    console.log(data);
                    console.log("SUCCESS");
                }
            });

在我的sshDownload控制器中,我正在尝试这样做:

        return Response::make($output, '200', array(
            'Content-Type' => 'text/plain',
            'Content-Disposition' => 'attachment; filename="file.log'
        ));

我甚至尝试过:

        return Redirect::route('sshDownloadName')->with($output);

但最终,每当我使用return时,它都会将数据发送回前端ajax。

如何直接从PHP下载字符串,而不是将其发送到ajax?

从你的问题中还不能100%清楚你想要什么——但这听起来像是一个Javascript问题,而不是Laravel问题。

当你告诉javascript发出AJAX请求时,你就是在告诉浏览器

嘿,在后台下载这个URL,完成后告诉我。

AJAX响应永远不会触发浏览器页面刷新或文件下载。您需要将整个浏览器(通过document.locationwindow.open或类似的方式)完全重定向到另一个页面,而不是AJAX请求。