From c45d8632ca137b5dab0774037e9274912c27346b Mon Sep 17 00:00:00 2001 From: zuevav Date: Thu, 24 Sep 2026 22:28:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BA=D0=BD=D0=BE=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F:=20=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=20=D1=83=D1=85=D0=BE=D0=B4=D0=B8=D1=82=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=BA=20=D0=BE=D0=B1=D1=8B=D1=87=D0=BD=D0=B0=D1=8F?= =?UTF-8?q?=20(urlencoded),=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=20=D0=B8?= =?UTF-8?q?=20multipart=20=E2=80=94=20=C2=AB=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=C2=BB=20=D1=83=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D0=B5=D1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- internal/lkgateway/setup.go | 6 +++++- internal/lkgateway/web/templates/layout.html | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/lkgateway/setup.go b/internal/lkgateway/setup.go index b33e5f8..5ba5c70 100644 --- a/internal/lkgateway/setup.go +++ b/internal/lkgateway/setup.go @@ -1401,7 +1401,11 @@ func (h *setupHandlers) applyUpdate(w http.ResponseWriter, r *http.Request) { http.Error(w, "method", http.StatusMethodNotAllowed) return } - _ = r.ParseForm() + // форма может прийти и как multipart (окно обновления) — иначе имена компонентов теряются + // и «Обновить» у одной строки превращается в «Обновить всё» + if err := r.ParseMultipartForm(1 << 20); err != nil { + _ = r.ParseForm() + } names := r.Form["component"] rc := h.rc save := func(msg string, err error) string { diff --git a/internal/lkgateway/web/templates/layout.html b/internal/lkgateway/web/templates/layout.html index c8fdc24..25e95b3 100644 --- a/internal/lkgateway/web/templates/layout.html +++ b/internal/lkgateway/web/templates/layout.html @@ -612,7 +612,9 @@ label { font-size:13px; font-weight:500; } bar.style.width=Math.max(3,Math.round(e.loaded/e.total*25))+'%'; detail.textContent=mb(e.loaded)+' из '+mb(e.total); } }; } xhr.onloadend=function(){ postDone=true; }; - xhr.send(new FormData(form)); + // обычные формы — как браузер (urlencoded), с файлом — multipart + if(file && file.files.length){ xhr.send(new FormData(form)); } + else { xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send(new URLSearchParams(new FormData(form)).toString()); } setTimeout(poll, 400); } function poll(){