Laravel无法返回图像。

7 浏览
0 Comments

Laravel无法返回图像。

我在公共文件夹以外的存储文件夹中有一张图片和一些文本文件。文件夹的结构如下:

storage

|->uploads

并设置了一个路由:

Route::get('storage/{folder}/{filename}','FileController@getFile');

在控制器中,getFile方法的代码如下:

  $path = storage_path($folder . DIRECTORY_SEPARATOR . $filename);
if (extension_loaded('fileinfo')) {
        if (!File::exists($path)) {
            abort(404);
        }
        $file = File::get($path);
        $type = File::mimeType($path);
        $response = Response::make($file, 200);
        $response->header("Content-Type", $type);
        return $response;
    }
    else{
        abort(412,'请启用fileinfo扩展或联系网站管理员');
    }

当我尝试从URL检索图像时,它返回空白图像,如此:

空白图像

但当我尝试检索文本文件时,它返回文件。

还尝试使用Image::make($path)response()->file($path),当mime类型为image/*时,输出仍然相同。

所以,如何在不使用公共文件夹的情况下显示我的图像文件的URL?

0
0 Comments

问题的出现原因是Laravel无法返回图像文件。经过排查,发现文件路径正确,文件也存在。当打印文件路径时,返回的是完整的文件路径,但是在浏览器地址栏或资源管理器中打开文件时却能够正常显示。进一步检查文件夹和文件的权限,发现所有用户都有读取权限。根据对比发现,开发环境可能不同,路径格式也不一样。解决方法是在返回文件的代码中添加文件协议,即在代码或传递给返回方法的路径前添加"file://"。

以下是修改后的代码示例:

public function getFile()
{
    $path = 'file://' . storage_path($folder . DIRECTORY_SEPARATOR . $filename);
    return response()->file($path);
}

通过添加文件协议,使得返回的文件路径能够在浏览器中正常打开。

0