我正在使用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...
}
}
答案 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'
];