使用Spatie Medialibrary+Dropzone上传视频报错求助
问题:Spatie Medialibrary搭配Dropzone上传视频时验证失败报错
我尝试基于Spatie Medialibrary实现视频上传功能,但搭配Dropzone使用时持续出现验证错误:
{"message":"The given data was invalid.","errors":{"file":["The file failed to upload."]}}
已经排查超过48小时仍未解决,疑惑Spatie Medialibrary是否不支持视频上传。以下是我编写的前端Dropzone代码及后端Controller代码,恳请协助解决问题。
前端代码
<!-- Video Field --> <div class="form-group align-items-start d-flex flex-column flex-md-row"> {!! Form::label('video', trans("lang.e_service_video"), ['class' => 'col-md-3 control-label text-md-right mx-1']) !!} <div class="col-md-9"> <div style="width: 100%" class="dropzone video" id="video" data-field="video"> </div> <a href="#loadMediaModal" data-dropzone="video" data-toggle="modal" data-target="#mediaModal" class="btn btn-outline-{{setting('theme_color','primary')}} btn-sm float-right mt-1">{{ trans('lang.media_select')}}</a> <div class="form-text text-muted w-50"> {{ trans("lang.e_service_video_help") }} </div> </div> </div> @prepend('scripts') <script type="text/javascript"> var dz_var16110647911349350349ble = $(".dropzone.video").dropzone({ url: "{!!url('uploads/store')!!}", addRemoveLinks: true, maxFiles: 1, maxFilesize: 500, acceptedFiles: 'video/*', init: function () { @if(isset($eService) && $eService->hasMedia('video')) var media = { name: "{!! $eService->getFirstMedia('video')->name !!}", size: "{!! $eService->getFirstMedia('video')->size !!}", type: "{!! $eService->getFirstMedia('video')->mime_type !!}", uuid: "{!! $eService->getFirstMedia('video')->getCustomProperty('uuid'); !!}", thumb: "{!! $eService->getFirstMedia('video')->getUrl('thumb'); !!}", collection_name: "{!! $eService->getFirstMedia('video')->collection_name !!}" }; dzInit(this, media, media.thumb); @endif }, accept: function (file, done) { dzAccept(file, done, this.element, "{!!config('medialibrary.icons_folder')!!}"); }, sending: function (file, xhr, formData) { dzSending(this, file, formData, '{!! csrf_token() !!}'); }, complete: function (file) { dzComplete(this, file); dz_var16110647911349350349ble[0].mockFile = file; }, removedfile: function (file) { dzRemoveFile( file, dz_var16110647911349350349ble, '{!! url("eServices/remove-media") !!}', 'video', '{!! isset($eService) ? $eService->id : 0 !!}', '{!! url("uploads/clear") !!}', '{!! csrf_token() !!}' ); } }); dz_var16110647911349350349ble[0].mockFile = []; dropzoneFields['video'] = dz_var16110647911349350349ble; </script> @endprepend
后端Controller代码
public function store(CreateEServiceRequest $request) { $input = $request->all(); try { $eService = $this->eServiceRepository->create($input); if (isset($input['video']) && $input['video']) { $fileUuid = $input['video']; $cacheUpload = $this->uploadRepository->getByUuid($fileUuid); $mediaItem = $cacheUpload->getMedia('video')->first(); $mediaItem->copy($eService, 'video'); } } catch (ValidatorException $e) { Flash::error($e->getMessage()); } Flash::success(__('lang.saved_successfully', ['operator' => __('lang.e_service')])); return redirect(route('eServices.index')); }
内容的提问来源于stack exchange,提问作者Pat Nadis
相关产品推荐
相关产品推荐

