Отправляйте изображения, используя dropzone в laravel с другими атрибутами формы - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь отправить изображения из Dropzone и других текстовых полей. но dropzone работает отдельно, как я могу представить файлы dropzone с другими данными формы в контроллере. Мне нужно отправить форму с файлами по нажатию кнопки в методе контроллера.

HTML Форма

 <form method="post" enctype="multipart/form-data" id="case-form" action="{{route('case-submit')}}">
            @csrf
            <div class="box-body form-element" >
                <div class="row">
                        <div class="form-group clearfix">

                            <div class="col-sm-12">
                                <label for="example-text-input" class="col-sm-10">Doctor</label>
                                <input class="form-control" type="text" name="doctor_name" id="doctor_name" required max="50">
                            </div>

                        </div>
                        <div class="form-group clearfix">

                            <div class="col-sm-12">
                                <label for="example-text-input" class="col-sm-10">Upper Aligner</label>
                                <input class="form-control" type="number" name="upper_aligner" id="upper_aligner" required>
                            </div>

                        </div>

                    </div>

                    <div class="col-md-6">
                        <div class="form-group clearfix">

                            <div class="col-sm-12">
                                <label for="example-text-input" class="col-sm-10">Portal</label>
                                <select class="form-control col-sm-10" name="portal_id" id="portal" required>
                                    @foreach($portal as $obj)
                                        <option value="{{$obj->id}}">{{$obj->name}}</option>
                                    @endforeach
                                </select>
                            </div>

                        </div>
                        <div class="form-group clearfix">

                            <div class="col-sm-12">
                                <label for="example-text-input" class="col-sm-10">Patient</label>
                                <input class="form-control" type="text" name="patient_name" id="patient_name" required max="50">
                            </div>

                        </div>
                        <div class="form-group clearfix">

                            <div class="col-sm-12">
                                <label for="example-text-input" class="col-sm-10">Lower Aligner</label>
                                <input class="form-control" type="number" id="lower_aligner" name="lower_aligner" required>
                            </div>
                        </div>

                    </div>
                    <!-- /.col -->
                </div>

                <div class="row">
                    <div class="col-md-12">

                        <div class="col-sm-4" runat="server">

                                    <label for="exampleInputFile">File Before</label>
                                    <label class="control-label file_before"  style="display:none; color: #fc4b6c;"><i class="fa fa-times-circle-o"></i></label>

                                    <div class="file-drop-area border dropzone clsbox" id="mydropzone">
                                    </div>
                        </div>


                        <div class="col-sm-4" runat="server">
                            <div class="form-group">
                                <label for="exampleInputFile">File After</label>
                                <label class="control-label file_after"  style="display:none; color: #fc4b6c;"><i class="fa fa-times-circle-o"></i></label>
                                <div class="file_after-drop-area border dropzone clsbox" id="fileafterdropzone">
                                </div>
                            </div>
                        </div>

                            <div class="col-sm-4">
                                <label for="exampleInputFile">IPR Form</label>

                                <div class="ipr_form-drop-area border">
                                    <input  type="file" id="ipr_form" name="ipr_form" class="ipr_form files" accept="image/*" required>
                                    <p class="message">Drag your files here or click in this area.</p>
                                </div>
                                <img src="" id="profile-img-tag" width="200px" />
                            </div>
                    </div>
                </div>
                <!-- /.row -->
            </div>
            <div class="box-footer">
                <button type="submit" class="btn btn-info pull-right">Submit Case</button>
            </div>
            <!-- /.box-body -->
        </form>

Javascript

 <script src="{{asset('public/js/dropzone.js')}}"></script>

<script>
    Dropzone.autoDiscover = false;

    // Dropzone class:
    var myDropzone = new Dropzone("div#mydropzone", {
        url: "{{route('case-submit')}}",
        acceptedFiles:'.stl',
        addRemoveLinks: true,
        autoProcessQueue:false,
        params: {
            _token: "{{csrf_token()}}"
        },
    });
    var myDropzone = new Dropzone("div#fileafterdropzone", {
        url: "{{route('case-submit')}}",
        acceptedFiles:'.stl',
        addRemoveLinks: true,
        autoProcessQueue:false,
        params: {
            _token: "{{csrf_token()}}"
        },
    });


</script>

   $(document).ready(function(e){
        // Submit form data via Ajax
        $("#case-form").on('submit', function(e){

            e.preventDefault();

                $.ajax({
                    type: 'POST',
                    url: '{{route('case-submit')}}',
                    data: new FormData(this),
                    dataType: 'html',
                    contentType: false,
                    cache: false,
                    processData:false,
                    success: function(response){

                    },
                    error: function(response){

                    }
                });



        });
    });
</script>

Контроллер

public function caseSubmit(Request $request)
{
    $case_number = $request->input('case_number');
    $patient_name = $request->input('patient_name');
    $doctor_name = $request->input('doctor_name');
    $portal_id = $request->input('portal_id');
    $date = date("Y-m-d H:m:s");
    $user_id = Auth::id();

        $caseInputData = ['patient_name' => $patient_name,
            'doctor_name' => $doctor_name,
            'case_number' => $case_number,
            'created_at' => $date,
            'user_id' => $user_id,
            'portal_id' => $portal_id
        ];

        $case = new Cases();

        $case_data = $case->storePatientCase($caseInputData);
        $caseId = $case_data->id;
        $caseNumber = $case_data->case_number;
    }

    if ($caseId != null && $caseId > 0) {
        $filesBefore = $request->file('file_before');

        $no_of_files_attached = count($filesBefore);
        $files_array = array();
        foreach ($filesBefore as $fileBefore) {

            $fileName = $fileBefore->getClientOriginalName();

            $pathToStoreFile = public_path() . '/cases/' . $caseNumber . '/filesBefore/' . $revisions;

            $fileBefore->move($pathToStoreFile, $fileName);

            $files_array[] = $fileName;

        }

        $filesAfter = $request->file('file_after');

        $no_of_files_attached = count($filesAfter);
        $afterfileArray = array();
        foreach ($filesAfter as $fileAfter) {

            $afterfileName = $fileAfter->getClientOriginalName();

            $pathToStoreFile = public_path() . '/cases/' . $caseNumber . '/filesAfter/' . $revisions;

            $fileAfter->move($pathToStoreFile, $afterfileName);

            $afterfileArray = $afterfileName;

        }

        $iprForm = $request->file('ipr_form');
        $ipr_form = $iprForm->getClientOriginalName();

        $pathToStoreFile = public_path() . '/cases/' . $caseNumber . '/ipr_form/' . $revisions;

        $iprForm->move($pathToStoreFile, $ipr_form);

        $unique_url = URL::to('/').'/'.$case_number.'/'.uniqid();

        $data_array = [

            'case_id' => $caseId,
            'operator_id' => $request->input('operator_id'),
            'upper_aligner' => $request->input('upper_aligner'),
            'lower_aligner' => $request->input('lower_aligner'),
            'file_before' => json_encode($files_array),
            'file_after' => json_encode($afterfileArray),
            'ipr_form' => $ipr_form,
            'updated_at' => null,
            'created_at' => $date,
            'revisions' => $revisions,
            'url' => $unique_url,
        ];
    }

Как я могу получить файлы в контроллере с другими текстовыми данными и отправить данные в базу данных, используя этот метод caseSubmit

...