我目前正在为一个项目开发一条路线,我需要从 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);
我以为你正在使用 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 等)。
由于您使用的是 Laravel,S3 方面的事情和流式响应都可以使用 Laravel S3 文件系统提供程序来完成...
return Storage::disk('s3')->response($path_to_file_on_s3);
存储门面上的
response
方法将创建您想要的流式响应。如果您想强制下载文件,可以使用 download
方法,或者 get
方法将仅返回文件内容。