将 S3 私有文件作为流返回

问题描述 投票:0回答:2

我目前正在为一个项目开发一条路线,我需要从 S3 获取特定文件,读取其内容,并以二进制形式返回。我不能只使用 S3 文件 URL,因为它是私有的并且是有意的(我们只是不希望存储桶文件打开)。
但问题是,我想在新页面中流式传输,而不需要下载文件。
服务:

$file = $this->s3Provider->getFileContents(false); // gets the file binary
return $file;

控制器:

return response()->streamDownload(function() use($file) {
    echo $file; // streams data to download it, but I want just to show the file...
  }, $filename);
php laravel amazon-s3 laravel-8
2个回答
2
投票

我以为你正在使用 Laravel,如果是这样,那么你可以像这样返回你的图像:

return response($file, $filename, [
    'Content-Type' => 'image/png',
    'Content-Length' => filesize($file)
  ]);

我用来返回图像的另一种方法是:

    return response()->file($path, array('Content-Type'=>'image/jpg'));

Content-Type
应该是您的图像类型(JPG、PNG 等)。


0
投票

由于您使用的是 Laravel,S3 方面的事情和流式响应都可以使用 Laravel S3 文件系统提供程序来完成...

return Storage::disk('s3')->response($path_to_file_on_s3);

存储门面上的

response
方法将创建您想要的流式响应。如果您想强制下载文件,可以使用
download
方法,或者
get
方法将仅返回文件内容。

© www.soinside.com 2019 - 2024. All rights reserved.