从资源文件夹中获取图像 - Laravel
Get image from resources folder - Laravel
我可以从资源文件夹而不是 public 文件夹中获取并显示图像吗?如果是,我该怎么做?
您的问题答案在 Laravel 的文档中:https://laravel.com/docs/5.7/helpers#method-app-path
$path = base_path('resources/path/to/img_dir');
resources
文件夹不应该用于 store images
那不是 public、静态资产(如图像、js、css 等)应该放的地方。
将它们放入 public/
文件夹
resources/assets/
目录可以说是用来存放pre-processed
资源的。
For example, if you have 3 different CSS files but want to merge them
into one and render that new single file in the browser (to increase
page load speed). In this scenario, the 3 CSS files will be put
somewhere inside resources/assets/.
然后这些文件可以processed
,新的合并文件将进入public。
参考:
https://laracasts.com/discuss/channels/laravel/image-assets?page=1
您可以创建符号链接:
ln -s /path/to/laravel/resources/images /path/to/laravel/public/images
尽管正如其他用户已经指出的那样,resource
目录并不打算公开使用。
你可以做一个专门用来展示图片的路由。
Route::get('/resources/app/uploads/{filename}', function($filename){
$path = resource_path() . '/app/uploads/' . $filename;
if(!File::exists($path)) {
return response()->json(['message' => 'Image not found.'], 404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
现在您可以转到 localhost/resources/app/uploads/filename.png,它应该会显示图像。
参考
但是再说一次,资源文件夹不应该用来存储图像那不是 public 静态资产(如图像、js、css 等)应该放的地方。正如@sehdev 所说的那样..
我同意@sehdev。
但是,如果您仍想从 resources
目录提供图像,这里有一个解决方案可以完成工作。
在您看来:
<img src="/your-image" />
在路线中:
Route::get('/your-image', function ()
{
$filepath = '/path/to/your/file';
$file = File::get($filepath);
$type = File::mimeType($filepath);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
$response->header("Content-Length", File::size($filepath));
return $response;
})
这不是最佳解决方案。我建议您将您的资产移动到 public 目录。
编辑:使用 laravel 函数。我建议不要从 url 获取文件路径,因为它可能会受到 Directory Traversal 的影响。
我可以从资源文件夹而不是 public 文件夹中获取并显示图像吗?如果是,我该怎么做?
您的问题答案在 Laravel 的文档中:https://laravel.com/docs/5.7/helpers#method-app-path
$path = base_path('resources/path/to/img_dir');
resources
文件夹不应该用于 store images
那不是 public、静态资产(如图像、js、css 等)应该放的地方。
将它们放入 public/
文件夹
resources/assets/
目录可以说是用来存放pre-processed
资源的。
For example, if you have 3 different CSS files but want to merge them into one and render that new single file in the browser (to increase page load speed). In this scenario, the 3 CSS files will be put somewhere inside resources/assets/.
然后这些文件可以processed
,新的合并文件将进入public。
参考:
https://laracasts.com/discuss/channels/laravel/image-assets?page=1
您可以创建符号链接:
ln -s /path/to/laravel/resources/images /path/to/laravel/public/images
尽管正如其他用户已经指出的那样,resource
目录并不打算公开使用。
你可以做一个专门用来展示图片的路由。
Route::get('/resources/app/uploads/{filename}', function($filename){
$path = resource_path() . '/app/uploads/' . $filename;
if(!File::exists($path)) {
return response()->json(['message' => 'Image not found.'], 404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
现在您可以转到 localhost/resources/app/uploads/filename.png,它应该会显示图像。
参考
但是再说一次,资源文件夹不应该用来存储图像那不是 public 静态资产(如图像、js、css 等)应该放的地方。正如@sehdev 所说的那样..
我同意@sehdev。
但是,如果您仍想从 resources
目录提供图像,这里有一个解决方案可以完成工作。
在您看来:
<img src="/your-image" />
在路线中:
Route::get('/your-image', function ()
{
$filepath = '/path/to/your/file';
$file = File::get($filepath);
$type = File::mimeType($filepath);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
$response->header("Content-Length", File::size($filepath));
return $response;
})
这不是最佳解决方案。我建议您将您的资产移动到 public 目录。
编辑:使用 laravel 函数。我建议不要从 url 获取文件路径,因为它可能会受到 Directory Traversal 的影响。