如何修复“文件上传失败”。使用任何验证进行图像上传时出错-Laravel 5.7

时间:2019-04-21 19:48:08

标签: laravel validation laravel-5 file-upload

我正在使用Laravel 5.7

我正在尝试上传图像文件,并使用内置的laravel验证来验证其上传。它一直以'The file failed to upload.'

响应

我正在使用AJAX上传此数据。我的表单已设置enctype="multipart/form-data"

我已经知道要在AJAX请求中包含CSRF令牌。

我已经解决了php.ini max_file_size的问题,并且正在测试的文件远远少于10MB。

如果我上传一个文本文件(例如),并且验证设置为required|image|max:10000,它将正确阻止该文件上传并以'File must be an image.'响应

如果我禁用所有验证,则文件上传就可以了。

我想不到我做错了什么。由于目前我的项目正在暂停,请提供帮助。

表单HTML:

<form method="post" class="dropzone" action="{{ route('images') }}" enctype="multipart/form-data"
                  data-nopants-load="dropzone{'transformImage':true,'acceptedFiles-1':'image/jpg','previewsContainer':'#dropzone-previews'}">
                @method('post')
                @csrf
                <div class="dz-border">
                    <div class="background"></div>
                    <div class="border"></div>
                </div>
                <div class="dz-message margins-auto _font-size-large"><span>Drop Images here or <span class="_underline">Click</span> to Upload.</span></div>
                <div class="fallback flex-col">
                    <div class="self-center margin-bottom">
                        <input name="file" type="file" class="form-input" multiple />
                    </div>
                    <button type="submit" class="button -call">Upload</button>
                </div>
            </form>

UploadImageFormRequest.php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

use Illuminate\Support\Facades\Auth;

class UploadImageFormRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();//user()->can('create', Organization::class);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return ['file' => 'required|image|mimes:jpeg,bmp,png'];
    }
}

UploadImagesController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests\UploadImageFormRequest;

class UploadImagesController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth:user,admin');
    }

    public function store(UploadImageFormRequest $request){
    //Wont get here...
    }
}

2 个答案:

答案 0 :(得分:7)

就我而言,问题在于upload_max_filesize。所以在 php.ini 文件中设置 upload_max_filesize 可以解决这个问题。

upload_max_filesize = 40m
post_max_size = 50m

答案 1 :(得分:0)

我认为多属性将其转换为数组,尝试删除多属性

<input name="file" type="file" class="form-input" multiple />

对此

<input name="file" type="file" class="form-input"/>

,如果您想拥有多张图片,则应该这样做

<input name="file[]" type="file" class="form-input" multiple />

和您的验证

        return [
      'file' => 'array',
      'file.*' => 'image|mimes:jpeg,bmp,png'
];