fix(vcard): decir por qué falla la subida a OSS, y no armar la clave con texto crudo del cliente
El sistema que consume /v2/vcard/qr-url solo recibía "Error subiendo archivo a OSS": el motivo quedaba en nuestro log y del otro lado no había nada que hacer con eso. Ahora la respuesta incluye el error real del proveedor —es una API entre servidores y el que llama ya conoce la config de OSS que mandó— y el log dice además qué clave se intentó subir. La clave del objeto se armaba con el nombre tal como venía en el body. Un nombre con "/" o con caracteres que OSS no acepta producía justamente ese error genérico. Ahora se limpia. El mismo nombre crudo se usaba para el archivo temporal (/tmp/<nombre>.webp), o sea escritura de archivos en una ruta que elegía quien llamaba. Se fue entero: los tres endpoints suben desde memoria con UploadFromReader, que además saca el paso a disco y su limpieza. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4674413257
commit
17ed57cb56
@@ -2,6 +2,7 @@ package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
|
||||
@@ -38,3 +39,30 @@ func getOSSFromQuery(c *fiber.Ctx) (services.OSSProvider, error) {
|
||||
}
|
||||
return services.NewOSSProvider(lastActive)
|
||||
}
|
||||
|
||||
// claveObjetoSegura arma una clave de objeto a partir de texto que viene del
|
||||
// cliente. Sin esto, un nombre con "/" o con caracteres de control produce una
|
||||
// clave que OSS rechaza — y el que llama solo ve "error subiendo a OSS".
|
||||
func claveObjetoSegura(nombre string) string {
|
||||
nombre = strings.TrimSpace(nombre)
|
||||
limpio := strings.Map(func(r rune) rune {
|
||||
switch {
|
||||
case r >= 'a' && r <= 'z', r >= 'A' && r <= 'Z', r >= '0' && r <= '9':
|
||||
return r
|
||||
case r == '-', r == '_', r == '.':
|
||||
return r
|
||||
case r == ' ':
|
||||
return '_'
|
||||
default:
|
||||
return -1
|
||||
}
|
||||
}, nombre)
|
||||
limpio = strings.Trim(limpio, "._-")
|
||||
if limpio == "" {
|
||||
return "sin-nombre"
|
||||
}
|
||||
if len(limpio) > 80 {
|
||||
limpio = limpio[:80]
|
||||
}
|
||||
return limpio
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user