You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:54:58