我无法从Laravel子文件夹中加载上传的图像

时间:2019-10-14 11:47:28

标签: php laravel file-upload storage

我试图让用户在动态子文件夹中上传基于项目的图像。可以上传它们,但不能在前端获取它们。似乎有权限问题。

其Laravel 5.8。我已经通过Storage:链接尝试过了,但是到目前为止还行不通。也许我做错了。

这是我的Testupload函数,它将文件存储在例如storage / app / 35 / image.jpg

public function store($file, $project){
        $filepath = $project->id.'/';
        if($file){
            Storage::disk('local')->put( $filepath .'/image.jpg', File::get($file));
        }
    }

那是我的路线:

Route::get('projectimage/{filename}', [
    'uses' => 'projectController@getProjectImage',
    'as' => 'getProjectImage'
]);

这是我的Blade模板部分:

 @if (Storage::disk('local')->has($project->id.'/image.jpg'))
                    <img src="{{ route('getProjectImage', [$project->id.'/image.jpg'])}}" alt="">
@endif

那就是如何获取图像:

    public function getProjectImage($filename){
        $file = Storage::disk('local')->get($filename);
        return new Response($file, 200);
    }

我没有t change any config file, but I did php artisan storage:link`,并通过“ public”而不是“ local”进行了尝试。没用但是它总是在没有子文件夹的情况下工作。我该如何解决?

我希望获得在FrontEnd中渲染的图像。结果链接为:src =“ http://myproject.test/projectimage/35/image.jpg”

现在我有一个奇怪的观点……如果我对子文件夹进行有效的硬编码。

$file = Storage::disk('local')->get('60/'.$filename);

我的解决方案:

刀片模板:

@if (Storage::disk('local')->has($project->id.'/image.jpg'))
                    <img src="{{ route('getProjectImage',['filename'=>'image.jpg', 'projectid'=>$project->id])}}" alt="">
                @endif

控制器:

    public function getProjectImage($filename, $project_id){

         $file = Storage::disk('local')->get($project_id.'/'.$filename);
        return new Response($file, 200);

    }

随时改进我的代码。 :*

2 个答案:

答案 0 :(得分:0)

在函数“ getProjectImage”中。

使用“ return response()-> file($ pathToFile);”会不会更好

我在这里留下了文档链接。 https://laravel.com/docs/5.8/responses#file-responses

答案 1 :(得分:0)

好的,Laravel似乎不允许视图侧的动态字符串输入获取服务器数据。我通过添加路线ID和图像名称作为参数来解决它。该路径将在控制器中构建。我将更新我的帖子。