#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');
а также вставьте метод загрузки в метод обновлений.