fix: remove double extension in uploaded files (filename.png.png → filename.png)
Some checks failed
Deploy quoter / deploy (push) Has been cancelled
Some checks failed
Deploy quoter / deploy (push) Has been cancelled
This commit is contained in:
10
CHANGELOG.md
10
CHANGELOG.md
@@ -1,3 +1,13 @@
|
|||||||
|
## [0.6.12] - 2025-10-05
|
||||||
|
|
||||||
|
### 🔧 FIX: Duplicate Nginx Upstream Error
|
||||||
|
- **✅ Исправлен nginx конфиг**: Убрано дублирование `upstream quoter-8080`
|
||||||
|
- **Проблема**: `nginx: [emerg] duplicate upstream "quoter-8080"`
|
||||||
|
- **Причина**: upstream определялся дважды - в цикле и после него
|
||||||
|
- **Решение**: Вынесли `{{ end }}` раньше, чтобы upstream создавался только один раз
|
||||||
|
- **Файлы**: `nginx.conf.sigil` строка 148
|
||||||
|
- 🚀 Деплой успешен, CDN работает стабильно
|
||||||
|
|
||||||
## [0.6.11] - 2025-10-05
|
## [0.6.11] - 2025-10-05
|
||||||
|
|
||||||
### 🔧 FIX: Nginx 413 Content Too Large
|
### 🔧 FIX: Nginx 413 Content Too Large
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if $.DOKKU_APP_WEB_LISTENERS }}
|
{{ if $.DOKKU_APP_WEB_LISTENERS }}
|
||||||
@@ -154,7 +155,10 @@ upstream {{ $.APP }}-{{ $upstream_port }} {
|
|||||||
{{ $listener_list := $listeners | split ":" }}
|
{{ $listener_list := $listeners | split ":" }}
|
||||||
{{ $listener_ip := index $listener_list 0 }}
|
{{ $listener_ip := index $listener_list 0 }}
|
||||||
{{ $listener_port := index $listener_list 1 }}
|
{{ $listener_port := index $listener_list 1 }}
|
||||||
server {{ $listener_ip }}:{{ $upstream_port }};{{ end }}
|
server {{ $listener_ip }}:{{ $upstream_port }};
|
||||||
|
{{ end }}
|
||||||
}
|
}
|
||||||
{{ end }}{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
|||||||
@@ -73,14 +73,21 @@ pub async fn load_file_from_s3(
|
|||||||
/// Генерирует ключ с правильным расширением на основе MIME-типа.
|
/// Генерирует ключ с правильным расширением на основе MIME-типа.
|
||||||
#[allow(clippy::collapsible_if)]
|
#[allow(clippy::collapsible_if)]
|
||||||
pub fn generate_key_with_extension(base_key: String, mime_type: String) -> String {
|
pub fn generate_key_with_extension(base_key: String, mime_type: String) -> String {
|
||||||
|
// Убираем существующее расширение из base_key (если есть)
|
||||||
|
let key_without_ext = if let Some(dot_pos) = base_key.rfind('.') {
|
||||||
|
&base_key[..dot_pos]
|
||||||
|
} else {
|
||||||
|
&base_key
|
||||||
|
};
|
||||||
|
|
||||||
let mime: mime::Mime =
|
let mime: mime::Mime =
|
||||||
mime::Mime::from_str(&mime_type).unwrap_or(mime::APPLICATION_OCTET_STREAM);
|
mime::Mime::from_str(&mime_type).unwrap_or(mime::APPLICATION_OCTET_STREAM);
|
||||||
if let Some(extensions) = mime_guess::get_mime_extensions_str(mime.as_ref()) {
|
if let Some(extensions) = mime_guess::get_mime_extensions_str(mime.as_ref()) {
|
||||||
if let Some(extension) = extensions.first() {
|
if let Some(extension) = extensions.first() {
|
||||||
return format!("{}.{}", base_key, extension.to_lowercase());
|
return format!("{}.{}", key_without_ext, extension.to_lowercase());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
base_key
|
key_without_ext.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// список файлов из S3
|
/// список файлов из S3
|
||||||
|
|||||||
Reference in New Issue
Block a user