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
@@ -1,12 +1,11 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/sujit-baniya/fiber-boilerplate/app"
|
||||
@@ -34,29 +33,21 @@ func CreateVcf(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
random := helpers.RandomString(4)
|
||||
fileName := fmt.Sprintf("vcf/vcf-%s-%s.vcf", strings.ReplaceAll(data.FirstName, " ", "_"), random)
|
||||
tmpPath := fmt.Sprintf("/tmp/vcf-%s-%s.vcf", strings.ReplaceAll(data.FirstName, " ", "_"), random)
|
||||
fileName := fmt.Sprintf("vcf/vcf-%s-%s.vcf", claveObjetoSegura(data.FirstName), random)
|
||||
|
||||
// 2. Guardar archivo temporal
|
||||
if err := os.WriteFile(tmpPath, vcfContent, 0644); err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "No se pudo guardar el VCF temporalmente",
|
||||
})
|
||||
}
|
||||
defer os.Remove(tmpPath)
|
||||
|
||||
// 3. Subir a OSS
|
||||
// 2. Subir a OSS directo desde memoria (ver el comentario en CreateQr).
|
||||
ossProvider, err := getOSSFromBody(c)
|
||||
if err != nil {
|
||||
log.Printf("[VCF] No se pudo resolver la config de OSS: %v", err)
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "Error de conexión con OSS",
|
||||
"error": "Error de conexión con OSS", "detalle": err.Error(),
|
||||
})
|
||||
}
|
||||
|
||||
if err := ossProvider.UploadFile(fileName, tmpPath); err != nil {
|
||||
log.Printf("Error subiendo archivo a OSS: %v", err)
|
||||
if err := ossProvider.UploadFromReader(fileName, "text/vcard; charset=utf-8", bytes.NewReader(vcfContent)); err != nil {
|
||||
log.Printf("Error subiendo archivo a OSS (%s): %v", fileName, err)
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "Error subiendo archivo a OSS",
|
||||
"error": "Error subiendo archivo a OSS", "detalle": err.Error(),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user