2016-05-29 93 views
1

我想下载一个存储在S3上的文件到我本地的Laravel安装来操作它。希望得到一些帮助。Laravel从S3下载到本地

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

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

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

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

奇怪的是,在例外它表明,它不能获取资源,但是当我把同样的网址在浏览器中会显示该文件没有任何麻烦。为什么文件系统无法获取文件?

我试图在“get”之前做一次“has”检查,并且has检查出现错误。

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

+0

你的网址可能是这样的https://s3.amazonaws.com/your_bucket/some_folder/some_other_folder/my.file所以你需要通过从桶中获取文件的桶之后的完整路径 –

回答

1

晚的答案,但对别人很重要,

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

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