Php 使用laravel从AmazonS3直接下载到客户端

Php 使用laravel从AmazonS3直接下载到客户端,php,laravel,amazon-s3,Php,Laravel,Amazon S3,我试图让我的客户端直接从AmazonS3下载一个大文件,而不用通过服务器下载 使用此功能: $downloadUrl = $s3->getObjectUrl('dev-checkmate', '1.zip', '+5 minutes', array( 'ResponseContentDisposition' => 'attachment; filename="test.zip"','Content-Type' => 'applicatio

我试图让我的客户端直接从AmazonS3下载一个大文件,而不用通过服务器下载

使用此功能:

        $downloadUrl = $s3->getObjectUrl('dev-checkmate', '1.zip', '+5 minutes', array(
            'ResponseContentDisposition' => 'attachment; filename="test.zip"','Content-Type' => 'application/zip',
    ));
    return $downloadUrl;
返回一个有效的url,我可以将其粘贴到浏览器并开始下载,如何使我的网页开始下载而不重定向到用户的url?(我不希望他得到一张空白页,我希望他留在我的网页上)

或者可能有不同的方法让用户直接从s3开始下载?
我不想用我的服务器来做这件事的原因是文件很大,而且我的服务器带宽很慢。

我建议您使用javascript在新窗口/选项卡中打开下载URL。通常,如果浏览器检测到下载,白色页面会自动关闭

下面是一个获取下载URL并进行重定向的示例:

$.ajax({
    url: '/download/test.zip', // change this to your real URL
    type: 'GET'
}).done(function(data){
    window.open(data);
});

或者,您可以在呈现视图时插入下载URL,这样就不需要进行ajax调用。

好主意,谢谢。顺便说一句,我试着在我的页面中打开这个窗口,只是为了测试它是否可以工作,我的浏览器将它作为弹出窗口阻止。它必须由用户操作(如单击)调用,这是正确的。我以为你会在点击按钮时执行下载,所以我没有提到;)当像u建议的那样使用ajax时,windows仍然被阻塞,甚至我认为用户点击被称为ajax功能太糟糕了。然后,在呈现视图时需要插入正确的下载URL,这样就不必发出请求。需要帮助吗?我只是通过在ajax调用var newWindow=window.open()之前打开窗口来解决这个问题;在ajax内部编辑位置属性newWindow.location=data['url'];