Laravel从S3下载到本地

时间:2016-05-29 10:08:19

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

我正在尝试将存储在S3上的文件下载到我当地的Laravel安装中来操作它。会感激一些帮助。

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

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

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

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

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

我曾尝试做过"有"在" get"之前检查并且检查结果是错误的。

我是否需要在数据库中保存完整的公共URL才能使其正常工作?我试过了,但没有帮助。我觉得我错过了很简单的事情,这让我很疯狂!!

2 个答案:

答案 0 :(得分:5)

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

 $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目录中找到此流文件。

答案 1 :(得分:0)

您可以根据需要提供内容类型,并将内容处置视为“附件”,因为您的文件来自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);