我正在尝试将存储在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才能使其正常工作?我试过了,但没有帮助。我觉得我错过了很简单的事情,这让我很疯狂!!
答案 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);