Laravel从S3路由下载文件(未在浏览器中打开)

时间:2015-08-19 12:29:50

标签: php amazon-web-services laravel-4 amazon-s3 laravel-routing

我有以下路线将从给定的URL加载文件,我需要这个实际下载文件(mp4,jpg,pdf)而不是在内置查看器的浏览器中打开。

// Download from CDN Route
Route::get('cdn/{url}', function($url)
    {   
        return Redirect::away($url);    
    })->where('url', '(.*)');

所有文件都存储在外部,因此显然Resource::download()实际上不起作用。

我可以使用的只有亚马逊网址:https://mybucket.s3.amazonaws.com/folder/filename.pdf

有关如何强制浏览器从S3下载文件的任何建议?

4 个答案:

答案 0 :(得分:0)

在我的情况下,简单的锚链接正在下载文件......

<a href="https://mybucket.s3.amazonaws.com/folder/filename.pdf"> file name </a>

答案 1 :(得分:0)

试试这段代码。

使用 flysystem

更新作曲家
 $path = 'https://mybucket.s3.amazonaws.com/folder/filename.pdf';
            if(Storage::disk('s3')->has($path)){
                $data = Storage::disk('s3')->get($path);
                $getMimeType = Storage::disk('s3')->getMimetype($path);
                $newFileName = 'filename.pdf'; 
                $headers = [
                            'Content-type' => $getMimeType, 
                            'Content-Disposition'=>sprintf('attachment; filename="%s"', $newFileName)
                            ];
                return Response::make($data, 200, $headers);
            }

答案 2 :(得分:0)

pari回答下载空文件。

$s3Client = AWS::createClient('s3');

$stream = $s3Client->getObject(

     [
       'Bucket' => 'bucket name',
       'Key'    => 'filename',
       'SaveAs' => '/tmp'.filename
   ]);

return response($stream['Body'], 200)->withHeaders([

    'Content-Type'        => $stream['ContentType'],
    'Content-Length'      => $stream['ContentLength'],
    'Content-Disposition' => 'attachment; filename="' .{filename with extention} . '"'
]);

答案 3 :(得分:0)

我们如何从另一台服务器下载带有外部链接的视频。不是s3。这是一台普通的服务器,文件在那里,但是不起作用。我已经写了这段代码

array(4) { ["dj"]=> string(0) "" ["facebook"]=> string(0) "" ["email"]=> string(0) "" ["code"]=> string(4) "3568" }