fix file size limit
This commit is contained in:
@@ -18,6 +18,7 @@ import {
|
|||||||
|
|
||||||
const ANDROID_PLATFORM = 'ANDROID' as const;
|
const ANDROID_PLATFORM = 'ANDROID' as const;
|
||||||
const APK_ACCEPT = '.apk,application/vnd.android.package-archive';
|
const APK_ACCEPT = '.apk,application/vnd.android.package-archive';
|
||||||
|
const MAX_RELEASE_FILE_BYTES = 350 * 1024 * 1024;
|
||||||
|
|
||||||
function formatBytes(value: string) {
|
function formatBytes(value: string) {
|
||||||
const size = Number(value);
|
const size = Number(value);
|
||||||
@@ -83,6 +84,10 @@ export default function AdminReleasesPage() {
|
|||||||
showToast('Выберите файл релиза');
|
showToast('Выберите файл релиза');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (file.size > MAX_RELEASE_FILE_BYTES) {
|
||||||
|
showToast('APK не должен превышать 350 МБ');
|
||||||
|
return;
|
||||||
|
}
|
||||||
const parsedVersionCode = Number(versionCode);
|
const parsedVersionCode = Number(versionCode);
|
||||||
if (!version.trim() || !Number.isInteger(parsedVersionCode) || parsedVersionCode < 1) {
|
if (!version.trim() || !Number.isInteger(parsedVersionCode) || parsedVersionCode < 1) {
|
||||||
showToast('Укажите версию и положительный код версии');
|
showToast('Укажите версию и положительный код версии');
|
||||||
|
|||||||
@@ -1809,6 +1809,13 @@ export async function uploadAdminAppRelease(
|
|||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
const body = await response.json().catch(() => ({}));
|
const body = await response.json().catch(() => ({}));
|
||||||
|
if (response.status === 413) {
|
||||||
|
throw new ApiError(
|
||||||
|
'Файл слишком большой для загрузки (лимит сервера). Максимальный размер APK — 350 МБ. Попросите администратора обновить nginx: ./install.sh --fix-proxy',
|
||||||
|
413,
|
||||||
|
'UPLOAD_TOO_LARGE'
|
||||||
|
);
|
||||||
|
}
|
||||||
const message = typeof body?.message === 'string' ? body.message : 'Не удалось загрузить релиз';
|
const message = typeof body?.message === 'string' ? body.message : 'Не удалось загрузить релиз';
|
||||||
throw new ApiError(message, response.status, 'UPLOAD_FAILED');
|
throw new ApiError(message, response.status, 'UPLOAD_FAILED');
|
||||||
}
|
}
|
||||||
|
|||||||
22
install.sh
22
install.sh
@@ -2306,6 +2306,9 @@ generate_all_self_signed_certs() {
|
|||||||
ok "Самоподписанный сертификат создан: ${LOCAL_CERTS_DIR}/shared-intranet"
|
ok "Самоподписанный сертификат создан: ${LOCAL_CERTS_DIR}/shared-intranet"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Лимит тела запроса в nginx (APK до 350 МБ + запас на multipart).
|
||||||
|
NGINX_RELEASE_UPLOAD_BODY_SIZE="${NGINX_RELEASE_UPLOAD_BODY_SIZE:-512m}"
|
||||||
|
|
||||||
nginx_conf_target() {
|
nginx_conf_target() {
|
||||||
local label="$1"
|
local label="$1"
|
||||||
if [[ "$NGINX_MODE" == "docker" ]]; then
|
if [[ "$NGINX_MODE" == "docker" ]]; then
|
||||||
@@ -2571,6 +2574,10 @@ ${proxy_ws}
|
|||||||
}
|
}
|
||||||
|
|
||||||
location ^~ /idp-api/ {
|
location ^~ /idp-api/ {
|
||||||
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
|
proxy_read_timeout 900s;
|
||||||
|
proxy_send_timeout 900s;
|
||||||
|
client_body_timeout 900s;
|
||||||
${proxy_idp}
|
${proxy_idp}
|
||||||
${nginx_proxy_headers_api}
|
${nginx_proxy_headers_api}
|
||||||
}
|
}
|
||||||
@@ -2611,7 +2618,7 @@ server {
|
|||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
client_max_body_size 100m;
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${ws_block}
|
${ws_block}
|
||||||
${api_location}
|
${api_location}
|
||||||
@@ -2626,7 +2633,7 @@ ${http_preamble}server {
|
|||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
${ssl_block}
|
${ssl_block}
|
||||||
client_max_body_size 100m;
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${ws_block}
|
${ws_block}
|
||||||
${api_location}
|
${api_location}
|
||||||
@@ -2661,6 +2668,10 @@ ${proxy_ws}
|
|||||||
}
|
}
|
||||||
|
|
||||||
location ^~ /idp-api/ {
|
location ^~ /idp-api/ {
|
||||||
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
|
proxy_read_timeout 900s;
|
||||||
|
proxy_send_timeout 900s;
|
||||||
|
client_body_timeout 900s;
|
||||||
${proxy_idp}
|
${proxy_idp}
|
||||||
${nginx_proxy_headers_api}
|
${nginx_proxy_headers_api}
|
||||||
}
|
}
|
||||||
@@ -2709,6 +2720,7 @@ server {
|
|||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${idp_api_block}
|
${idp_api_block}
|
||||||
location / {
|
location / {
|
||||||
@@ -2726,7 +2738,7 @@ ${http_preamble}server {
|
|||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
${ssl_block}
|
${ssl_block}
|
||||||
client_max_body_size 50m;
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${idp_api_block}
|
${idp_api_block}
|
||||||
location / {
|
location / {
|
||||||
@@ -2761,7 +2773,7 @@ server {
|
|||||||
listen 80;
|
listen 80;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
client_max_body_size 50m;
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${idp_api_block}
|
${idp_api_block}
|
||||||
location / {
|
location / {
|
||||||
@@ -2779,7 +2791,7 @@ ${http_preamble}server {
|
|||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
server_name ${domain};
|
server_name ${domain};
|
||||||
${ssl_block}
|
${ssl_block}
|
||||||
client_max_body_size 50m;
|
client_max_body_size ${NGINX_RELEASE_UPLOAD_BODY_SIZE};
|
||||||
${server_dns}
|
${server_dns}
|
||||||
${idp_api_block}
|
${idp_api_block}
|
||||||
location / {
|
location / {
|
||||||
|
|||||||
Reference in New Issue
Block a user