使用Laravel强制从S3下载图像

时间:2015-09-17 17:57:14

标签: php laravel amazon-s3 download

我试图通过链接下载图片,该链接将我引导至此方法:

    $image = $st->getFullPathWithImage(null, $type, true, true);

    if ($image) {
        $content_type = 'image/jpeg';

        $basename = basename($image);

        Download::add($st->id);

        return Response::download($image, $basename, array('Content-Type: ' . $content_type));
    }

如果我尝试调试 $ image 中的内容,我会从S3获取正确的URL,但该方法无法说明:

The file "path_to_my_bucket/uploads/14424179653mYJLut2zVEnyR30YQEm.jpg" does not exist

我猜这是由于我必须在S3 / AWS上设置的东西,但我对它是什么一无所知,以及如何将它绑定到Laravel的Response ::下载()。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

回答有同样问题的人。

原来S3与此问题无关。而不是使用Laravel的Response :: download(),我切换到手动,原始的php标头设置,事情确实有效。我不确定为什么常规的Laravel解决方案会返回404,但我需要一个简单快速的解决方案,这是我能找到的最好的。

因此,不要返回Response :: download(),而是执行此操作:

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . basename($image));
header("Content-Type: image/jpeg");

return readfile($image);

答案 1 :(得分:0)

还可以返回重定向到图片网址

return response()->redirectTo("https://s3-us-west-2.amazonaws.com/" . $document->path);

来源:https://laracasts.com/discuss/channels/laravel/file-response-from-s3