laravel5.6 api 图片上传报错

问题描述

通过api接口的形式上传图片到服务器,报错:Symfony Component HttpKernel Exception MethodNotAllowedHttpException

详细报错信息:
https://img.mukewang.com/5c8f3b7300014f6f08000297.jpg

问题出现的环境背景及自己尝试过哪些方法

我使用的是laravel5.6版本,上传.txt文件可以成功,但是上传图片文件就会出现这个错误,即使图片大小只有十几KB。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
路由代码:routes/api.php中
Route:: post('uploadImg', 'UploadImgController@uploadImg');
Route:: get('upload', 'FileController@upload');
控制器代码:
public function uploadImg(Request $request)

{
    if (!$request->hasFile('pic') || !$request->file('pic')->isValid()) {
        return response()->json(error('1'));
    }

    // 格式校验
    $extension = $request->file('pic')->extension();
    if (!in_array($extension, ['png', 'jpg', 'jpeg'])) {
        return response()->json(error('2'));
    }
    // 大小校验
    $size = $request->file->getClientSize();
    if ($size > 2048 * 1000) {
        return response()->json(error('3'));
    }
    // 上传文件, 并获取上传后的访问地址
    $path = $request->file('pic')->store('images','local');
    return response()->json(success(['src' => $path]));
}



public function upload(){
    return view('index');
}

模板代码:
<!doctype html>
<html>

<head>
    <title>图片上传测试</title>
    <meta charset="utf-8">

</head>
<body>
<div class="container">
    <div class="panel-heading">上传文件</div>
    <form name="uploadImg" method="post" action="{{url('/api/uploadImg')}}" enctype="multipart/form-data"  >
        <label for="file">选择文件</label>
        <input name="pic" type="file" >
        <button type="submit" class="btn btn-primary">确定</button>
    </form>
</div>


</body>

</html>

你期待的结果是什么?实际看到的错误信息又是什么?

上传txt文件没问题,但是上传任意图片文件都会报这个错。

qq_花开花谢_0
浏览 472回答 2
2回答

狐的传说

找到问题所在了,是因为nginx的权限问题,把nginx的权限改成www的就好了

一只名叫tom的猫

可能是 enctype="multipart/form-data" 导致的 看报错是请求不合法,一般来说是 HTTP 请求上的问题
打开App,查看更多内容
随时随地看视频慕课网APP