在 Laravel 5.2 上路由文件路径时出现 405(不允许的方法)

Posted

技术标签:

【中文标题】在 Laravel 5.2 上路由文件路径时出现 405(不允许的方法)【英文标题】:405 (Method Not Allowed) when routing a file path on Laravel 5.2 【发布时间】:2016-11-21 08:03:25 【问题描述】:

在用户帐户更新请求中,UserController.php 是:

    public function postSaveAccount(Request $request) 

            $this->validate($request, [
                'first_name' => 'required|max:120',
            ]);

            $user = Auth::user();
            $user->first_name = $request['first_name'];
            $user->update();
            $file = $request->file('image');
            //todo: treat image and upload other formats, maybe unique hash.
            $filename = $request['first_name'] . '-' . $user->id . '.jpg';
            if ($file) 
                Storage::disk('local')->put($filename, File::get($file));
            
            return redirect()->route('account');
        

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

在 routes.php 上:

       Route::get('/account', [
          'uses' => 'UserController@getAccount',
          'as' => 'account',
          'middleware' => 'auth',
        ]);

        Route::post('/updateaccount', [
            'uses' => 'UserController@postSaveAccount',
            'as' => 'account.save',
            'middleware' => 'auth',
        ]);

        Route::post('/userimage/filename', [
            'uses' => 'UserController@getUserImage',
            'as' => 'account.image',
        ]);

在视图上:

@section('content')
    <section class="row new-post">
        <div class="col-md-6 col-md-offset-3">
            <header><h3>Your Account</h3></header>
            <form action=" route('account.save') " method="post" enctype="multipart/form-data">
                <div class="form-group">
                    <label for="first_name">First Name</label>
                    <input type="text" name="first_name" class="form-control" value=" $user->first_name " id="first_name">
                </div>
                <div class="form-group">
                    <label for="image">Image (only .jpg)</label>
                    <input type="file" name="image" class="form-control" id="image">
                </div>
                <button type="submit" class="btn btn-primary">Save Account</button>
                <input type="hidden" value=" Session::token() " name="_token">
            </form>
        </div>
    </section>
    @if (Storage::disk('local')->has($user->first_name . '-' . $user->id . '.jpg'))
        <section class="row new-post">
            <div class="col-md-6 col-md-offset-3">
                <img src=" route('account.image', ['filename' => $user->first_name . '-' . $user->id . '.jpg']) "  class="img-responsive">
            </div>
        </section>
    @endif
@endsection

我收到 405(不允许的方法)。 该文件正确上传,我使用的是正确的门面。 只是url路由显示不正常,有什么建议吗?

Tnks。

【问题讨论】:

我没有看到在您的路由中的任何位置定义了路由 account,因此您似乎正在尝试重定向到不存在的路由。 是的,路由账户存在。编辑。 Tnks :) 【参考方案1】:

您的 account.image 路由应该使用 Route::get 而不是 Route::post

【讨论】:

是的,确实如此。正确的解决方案。 Tnks【参考方案2】:

route('account') 似乎不存在?您需要创建它。

【讨论】:

【参考方案3】:

好的,发现错误:

routes.php 上应该是:

Route::get('/userimage/filename', [
    'uses' => 'UserController@getUserImage',
    'as' => 'account.image',
]);

【讨论】:

以上是关于在 Laravel 5.2 上路由文件路径时出现 405(不允许的方法)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 迁移第二个表时出现数据库迁移错误

使用 Laravel 文件管理器显示图像时出现问题。路线问题

在本地主机上运行 laravel 时出现内部服务器错误

POST 路由未从根路径 Laravel 5.2 中列出

在 laravel 5.2 中创建符号链接时出错?

Laravel 5.2 路由仅适用于根目录