Laravel从存储中检索图像并且无法打开流:没有这样的文件或目录

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

我在使用Laravel检索图像并能够在我的控制器中使用这些图像时遇到问题。

我首先检查以确保图像存在,返回true

var_dump(storage::disk('local')->exists('image.png'))

如果我这样做

$file = Storage::disk('local')->get('image.png');
var_dump(pathinfo($file));

我得到这个输出

array(2) {
  ["basename"]=>
  string(0) ""
  ["filename"]=>
  string(0) ""
}

只是var_dump()在$file给我一个空字符串

如果我这样做

$file = Storage::disk('local')->url('image.png');
var_dump(pathinfo($file));

我明白了

array(4) {
  ["dirname"]=>
  string(8) "/storage"
  ["basename"]=>
  string(9) "image.png"
  ["extension"]=>
  string(3) "png"
  ["filename"]=>
  string(5) "image"
}

我不想知道属性,我需要能够使用实际存储的图像并将其上传到另一个API。

如果我尝试做

echo '<img src="'.$file.'">';

我在浏览器源中得到这个,但看不到任何图像

<img src="/storage/image.png">

我用来上传图片的API会返回此信息

mime_content_type(/storage/image.png): failed to open stream: No such file or directory

我相信一旦我能得到实际的图像,剩下的就可以了

编辑:

我运行了这个命令php artisan storage:link

如果我使用$file = public_path('uploads/image.png');并将文件复制到公共文件夹(而不是存储/ app / public),我可以使用图像我想要的

这并不理想,因为我不希望图像可公开访问。我需要能够从存储文件夹中访问该图像。

如果我运行$file = Storage::disk('public')->get('image.jpg');我得到mime_content_type(): Invalid path

我正在尝试将图像的路径发送到我需要使用的API。它所需要的只是/the/path/to/the/image

在尝试获取图像时,我尝试过的其他代码会产生403

php image laravel-5.4
1个回答
0
投票

公共目录外的/storage文件夹,它是Web服务器的文档/ Web根目录。公众无法访问/storage文件夹。您应该响应输出图像内容。

$path = storage_path() . "/app/image.png";
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
© www.soinside.com 2019 - 2024. All rights reserved.