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


Laravel download file from S3 route (not open in browser)

我有下面的路由,将从给定的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下载文件有什么建议吗?

pari answer download empty file.

$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} . '"'
]);

试试这段代码。

使用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);
            }

如何从其他服务器下载带有外部链接的视频?它不是s3。这是一个普通的服务器,文件在那里,但它不能工作。我写了这段代码

                $filename = $video->video_id;
                $tempFile = tempnam(sys_get_temp_dir(), $filename);
//              dd($tempFile);
                copy($video->path, $tempFile);
                header("Content-Disposition: attachment; filename = ".$filename);
                header("X-Accel-Redirect: ".$filename);
                return response()->download($tempFile, $filename);

在我的例子中,简单的锚链接是下载文件…

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