服务 PHP 图像资源作为 Laravel 中的响应
Serving PHP image resource as response in Laravel
我正在开发一个网络应用程序。在我的应用程序中,我需要处理一些图像并将其显示在浏览器上。但我没有将图像保存为文件并从路径访问文件。我出于某种原因没有这样做。相反,我从某种字节数据创建一个图像资源,然后提供它。
这是我在控制器中的代码。
function serveS3Image(Request $request)
{
$image_data = Storage::disk('s3')->get($request->get('identifier'));
$data = imagecreatefromstring($image_data);
header('Content-Type: image/png');
imagepng($data);
}
当我从浏览器访问操作时,它显示正确的图像。但我想以更多 Laravel 的方式来做。像这样:
function serveS3Image()
{
return Response::ImageResource($data);
}
如何return PHP 图片资源?
https://laravel.com/docs/5.5/responses#file-responses
文件方法可用于直接在用户浏览器中显示文件,例如图像或 PDF,而不是启动下载。
此方法接受文件路径作为第一个参数,headers 数组作为第二个参数:
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);
我在 Laracast 上发现了和你一样的问题。
看看this thread。希望对你有所帮助。
编辑: 从 laracast 添加代码
public function downloadAsset($id)
{
$asset = Asset::find($id);
$assetPath = Storage::disk('s3')->url($asset->filename);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . basename($assetPath));
header("Content-Type: " . $asset->mime);
return readfile($assetPath);
}
最后,我根据一些答案得到了解决方案。我只需要这样return。
return response(Storage::disk('s3')->get($request->get('identifier')))->header('Content-Type', 'image/png');
在响应中,我传递了图像数据,而不是文件路径。然后我在 header 中设置内容类型。谢谢大家。
我正在开发一个网络应用程序。在我的应用程序中,我需要处理一些图像并将其显示在浏览器上。但我没有将图像保存为文件并从路径访问文件。我出于某种原因没有这样做。相反,我从某种字节数据创建一个图像资源,然后提供它。
这是我在控制器中的代码。
function serveS3Image(Request $request)
{
$image_data = Storage::disk('s3')->get($request->get('identifier'));
$data = imagecreatefromstring($image_data);
header('Content-Type: image/png');
imagepng($data);
}
当我从浏览器访问操作时,它显示正确的图像。但我想以更多 Laravel 的方式来做。像这样:
function serveS3Image()
{
return Response::ImageResource($data);
}
如何return PHP 图片资源?
https://laravel.com/docs/5.5/responses#file-responses
文件方法可用于直接在用户浏览器中显示文件,例如图像或 PDF,而不是启动下载。
此方法接受文件路径作为第一个参数,headers 数组作为第二个参数:
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);
我在 Laracast 上发现了和你一样的问题。 看看this thread。希望对你有所帮助。
编辑: 从 laracast 添加代码
public function downloadAsset($id)
{
$asset = Asset::find($id);
$assetPath = Storage::disk('s3')->url($asset->filename);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=" . basename($assetPath));
header("Content-Type: " . $asset->mime);
return readfile($assetPath);
}
最后,我根据一些答案得到了解决方案。我只需要这样return。
return response(Storage::disk('s3')->get($request->get('identifier')))->header('Content-Type', 'image/png');
在响应中,我传递了图像数据,而不是文件路径。然后我在 header 中设置内容类型。谢谢大家。