【问题标题】:Laravel Download from S3 To LocalLaravel 从 S3 下载到本地
【发布时间】:2016-09-27 06:38:24
【问题描述】:

我正在尝试将存储在 S3 上的文件下载到本地 Laravel 安装以对其进行操作。将不胜感激一些帮助。

我已经正确设置了配置数据,因为我可以毫无问题地上传它。我使用以下模式将其保存在 S3 中“user->id / media->id.mp3”-> 请注意,我不只是在 S3 上转储文件,而是将它们保存在目录中。

成功将文件上传到 S3 后,我更新了数据库中的保存路径以显示“user->id / media->id.mp3”,而不是一些长的公共 url(这是错误的)吗?

当我稍后返回尝试下载文件时,我在 S3 收到 FileNotFoundException。我正在这样做。

$audio = Storage::disk('s3')->get($media->location);

奇怪的是,在异常中它显示了它无法获取的资源,但是当我将相同的 url 放在浏览器中时,它会毫无问题地显示文件。为什么文件系统无法获取文件?

我曾尝试在“get”之前进行“has”检查,但 has 检查结果为假。

我是否需要将完整的公共 URL 保存在数据库中才能正常工作?我试过了,但没有帮助。我觉得我错过了一些非常简单的东西,这让我发疯了!!

【问题讨论】:

标签: php amazon-web-services amazon-s3 laravel-5 download


【解决方案1】:

迟到的答案,但对其他人很重要,

 $s3_file = Storage::disk('s3')->get(request()->file);
 $s3 = Storage::disk('public');
 $s3->put("./file_name.tif", $s3_file);

$s3_file 的响应将是一个流,你可以使用 Laravel 的 put file 方法将该流数据保存到文件中,你会在storage/public 目录中找到这个流文件。

【讨论】:

    【解决方案2】:

    您可以根据需要将 Content-Type 和 Content-Disposition 指定为“附件”,因为您的文件来自 S3,您必须将其作为附件下载。

    $event_data = $this->ticket->where('user_id', $user_id)->first();
    
    $data  = $event_data->pdf;
    
    $get_ticket = 'tickets/'. $data;
    $file_name  = "YOUR_DESIRED_NAME.pdf";
    
    $headers = [
      'Content-Type'        => 'application/pdf',            
      'Content-Disposition' => 'attachment; filename="'. $file_name .'"',
    ];
    
    return \Response::make(Storage::disk('s3')->get($get_ticket), 200, $headers);
    

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 2020-11-27
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多