Procházet zdrojové kódy

fix: presigned URL — заменяем внутр. хост minio:9000 на публичный

neyrogovnarik před 1 měsícem
rodič
revize
045b6fbc73
1 změnil soubory, kde provedl 10 přidání a 2 odebrání
  1. 10 2
      backend/internal/handlers/upload.go

+ 10 - 2
backend/internal/handlers/upload.go

@@ -4,6 +4,7 @@ package handlers
 import (
 	"encoding/json"
 	"net/http"
+	"net/url"
 	"time"
 
 	"github.com/google/uuid"
@@ -84,16 +85,23 @@ func (h *UploadHandler) PresignedURL(w http.ResponseWriter, r *http.Request) {
 	policy.SetContentType(req.ContentType)
 	policy.SetContentLengthRange(1, int64(req.MaxSizeMB)*1024*1024)
 
-	url, formData, err := h.minioClient.PresignedPostPolicy(r.Context(), policy)
+	uploadURL, formData, err := h.minioClient.PresignedPostPolicy(r.Context(), policy)
 	if err != nil {
 		writeError(w, http.StatusInternalServerError, "failed to generate upload URL", err)
 		return
 	}
 
+	// Replace internal endpoint (minio:9000) with public endpoint for browser uploads
+	publicUploadURL := uploadURL
+	uploadURLStr := h.publicEndpoint + uploadURL.Path + "?" + uploadURL.RawQuery
+	if parsed, err := url.Parse(uploadURLStr); err == nil {
+		publicUploadURL = parsed
+	}
+
 	fileURL := h.publicEndpoint + "/" + h.bucket + "/" + objectName
 
 	writeJSON(w, http.StatusOK, presignedURLResponse{
-		UploadURL: url.String(),
+		UploadURL: publicUploadURL.String(),
 		FileURL:   fileURL,
 		Fields:    formData,
 	})