From 170041f8074a9685a9d44d585f8508a062e73721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruben=20H=C3=B6nle?= Date: Fri, 7 Feb 2025 15:12:05 +0100 Subject: [PATCH] fix: use file inputstream on file upload instead of in-memory buffer (#671) relates to STACKITTPR-70 Co-authored-by: Ruben Hoenle --- stackit/internal/services/iaas/image/resource.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/stackit/internal/services/iaas/image/resource.go b/stackit/internal/services/iaas/image/resource.go index 425b563f..d419252b 100644 --- a/stackit/internal/services/iaas/image/resource.go +++ b/stackit/internal/services/iaas/image/resource.go @@ -1,7 +1,7 @@ package image import ( - "bytes" + "bufio" "context" "fmt" "net/http" @@ -828,16 +828,21 @@ func uploadImage(ctx context.Context, diags *diag.Diagnostics, filePath, uploadU return fmt.Errorf("upload URL is empty") } - fileContents, err := os.ReadFile(filePath) + file, err := os.Open(filePath) if err != nil { - return fmt.Errorf("read file: %w", err) + return fmt.Errorf("open file: %w", err) + } + stat, err := file.Stat() + if err != nil { + return fmt.Errorf("stat file: %w", err) } - req, err := http.NewRequest(http.MethodPut, uploadURL, bytes.NewReader(fileContents)) + req, err := http.NewRequest(http.MethodPut, uploadURL, bufio.NewReader(file)) if err != nil { return fmt.Errorf("create upload request: %w", err) } req.Header.Set("Content-Type", "application/octet-stream") + req.ContentLength = stat.Size() client := &http.Client{} resp, err := client.Do(req)