Как остановить загрузку вложения(с помощью TRIX) на сервер до тех пор, пока не будет нажата кнопка «Отправить»? Ларавель 8

#php #laravel

Вопрос:

У меня есть форма с некоторыми полями ввода. Все работает нормально, но когда я прикрепляю файл(редактор TRIX для загрузки изображения или PDF) с помощью кнопки вложения, он загружается непосредственно на сервер(ЛОКАЛЬНЫЙ хост) перед отправкой формы. Другие значения полей(работает нормально) или входные данные загружаются на сервер только после нажатия кнопки «Отправить», за исключением вложения.

Я хочу загрузить файл только после нажатия кнопки отправить.

Вот ФОРМА в open_file.blade.php:

     <form method="GET" action="{{route('visitor.update', [auth()->user()->id])}}" enctype="multipart/form-data">

     @csrf
                                        
    <div class="form-group row"> 
    <label class="col-md-4 col-form-label text-md-right" for="heading_1">Headline</label>
    <div class="col-md-6"> 
    
    <input type="text" name="heading_1" class="form-control @error('question') border-red @enderror" placeholder="Topic Name" >
    
    </div>
    </div>
        
    <div class="form-group row">
    <label for="file" class="col-md-4 col-form-label text-md-right">Image Upload</label>
    <div class="col-md-6"> 
                                            
    <input required type="hidden" class="form-control" id="file" name="file">
    <trix-editor name="file" input="file"></trix-editor>                                   
    
    </div>
    </div>
        
    <div class="form-group row">
    <label for="summary_1" class="col-md-4 col-form-label text-md-right">Description</label>
    <div class="col-md-6"> 
                                                 
    <textarea name="summary_1" rows="5" cols="40" class="form-control tinymce-editor"></textarea>
        
    </div> 
    </div>
        
    <div class="form-group row">
    <label class="col-md-4 col-form-label text-md-right" for="frame_1">Embed Link</label>
    <div class="col-md-6"> 
    
     <input type="url" name="frame_1" class="form-control" placeholder="Paste URL here to Embed">
    
     </div>    
     </div>
        
    <div class="form-group row">
    <label class="col-md-4 col-form-label text-md-right" for="url_1">Download Link</label>
    <div class="col-md-6">
    
    <input type="url" name="url_1" class="form-control placeholder="Paste URL here" >
    
    </div>                                       
    </div>
        
    <div class="form-group row">
    <label class="col-md-4 col-form-label text-md-right" for="date_1">Upload Date</label>
    <div class="col-md-6"> 
    
    <input name="date_1" id="date" type="datetime-local" class="form-control" placeholder="Date of Upload" value="{{$current_date}}"/>
                                        
    </div>
    </div>                      
        
    <div class="form-group text-center mt-4">
    
    <button type="submit" id="submit" style="width: 100%" class="btn btn-danger" value="Save">Post</button>
        
    </div>                           
        
    </form>
 

Вот функция загрузки с контроллера:

 public function upload(Request $request){   
    
if($request->hasFile('file')) {

        $this->validate($request, [
            "file" => "mimes:jpg,png,jpeg,gif,pdf|required|max:2000",
       ],

    );

        $filenamewithextension = $request->file('file')->getClientOriginalName();
 
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        $extension = $request->file('file')->getClientOriginalExtension();
 
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        $request->file('file')->storeAs('uploads', $filenametostore);

        $path = asset('storage/uploads/'.$filenametostore);

        DB::table('images')->insert([
            'image'=> $path
        ]);
        
        echo $path;

        exit;

    } 
}
 

функция обновления с контроллера:

 public function updates(Request $request)
    {   
        $visitor = (new User)->updatesUser($request->all(), auth()->user()->id);
    
        return redirect()->back()->with('message', 'File upadted!');
    }
 

Маршруты web.php:

 Route::get('/open_file', 'VisitorController@open_file')->name('visitor.open_file')->middleware('auth');

Route::resource('updates','VisitorController');

Route::post('upload', 'VisitorController@upload');
 

Ответ №1:

Я решил эту проблему.

Проблема была в маршруте, я изменил форму отправки на СООБЩЕНИЕ

 <form method="POST" action="{{route('visitor.update', [auth()->user()->id])}}" enctype="multipart/form-data">@csrf
                                
@method('GET')
 

и маршрут, чтобы ДОБРАТЬСЯ:

 Route::get('/open_file', 'VisitorController@open_file')->name('visitor.open_file')->middleware('auth');

Route::get('updates','VisitorController@updates');
 

а также вставьте метод загрузки в метод обновлений.