【问题标题】:Laravel download file from S3 route (not open in browser)Laravel 从 S3 路径下载文件(不在浏览器中打开)
【发布时间】:2015-11-12 18:10:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我们如何从另一台服务器下载带有外部链接的视频。这不是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);
    

    【讨论】:

      【解决方案2】:

      pari answer下载空文件。

      $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】:

        试试这个代码。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-08
            • 2018-10-20
            • 2013-10-25
            • 2019-03-08
            • 1970-01-01
            • 2011-10-18
            相关资源
            最近更新 更多