【问题标题】:force download file from s3 url强制从 s3 url 下载文件
【发布时间】:2022-08-04 16:09:58
【问题描述】:

我有一个 s3 URL,URL 中没有文件扩展名。 有什么办法可以直接从 URL 强制下载文件

https://s3-external-1.amazonaws.com/media.twiliocdn.com/AC451bab3cca7e01e20ee6bf1e746bed1f/10b62b6d5fe2f69be39840ce1201a2e7

在数据库中,我存储此 URL 以显示图像或任何文件,但现在我需要单击下载按钮在用户系统中下载此图像

仅供参考:这不是我们的 s3 存储桶,而是存储我们媒体的 Twilio 服务存储桶。

    标签: php laravel twilio laravel-8


    【解决方案1】:

    您可以将图像临时存储在文件系统中,然后将其作为下载响应发送。

    use Illuminate\Support\Facades\Http;
    use Illuminate\Support\Str;
    
    $response = Http::get(
        'https://s3-external-1.amazonaws.com/media.twiliocdn.com/AC451bab3cca7e01e20ee6bf1e746bed1f/10b62b6d5fe2f69be39840ce1201a2e7'
    );
    
    file_put_contents($file = '/tmp/' . Str::uuid(), $response->body());
    
    preg_match('/filename=\"(.+)\"/', $response->header('content-disposition'), $matches);
    
    return response()->download($file, $matches[1], [
        'Content-Type' => $response->header('content-type'),
    ])->deleteFileAfterSend();
    

    【讨论】:

      【解决方案2】:

      最后,在投入了这么多小时后,我找到了解决方案。

      public function download($media){
      
      $name = now()->format('m-d-Y-h:i:s') . '.' . Illuminate\Http\Testing\MimeType::search($media->content_type);
      
      return response()->streamDownload(function () use ($media){
          echo file_get_contents($media->url);
      }, $name);
      
      }
      

      【讨论】:

        【解决方案3】:

        从您的控制器,您可以返回一个下载响应,让您指定一个具有自定义名称的文件。像这样...

            return response()
                ->download(
                    $file,
                    'download.jpeg',
                );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-11
          • 2011-12-27
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 1970-01-01
          • 2023-03-28
          相关资源
          最近更新 更多