From f343dd42fa392569ef8a2ec7801f518f96cba54b Mon Sep 17 00:00:00 2001 From: Tanner Barnes Date: Mon, 28 Apr 2025 09:37:37 -0500 Subject: [PATCH 1/2] The OpenAI edit image api only allows PNGs but the default `CreateFormFile` wrapper only does `application/octet-stream`. --- internal/form_builder.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/form_builder.go b/internal/form_builder.go index 2224fad45..0bf958ef6 100644 --- a/internal/form_builder.go +++ b/internal/form_builder.go @@ -4,8 +4,10 @@ import ( "fmt" "io" "mime/multipart" + "net/textproto" "os" "path" + "strings" ) type FormBuilder interface { @@ -34,12 +36,23 @@ func (fb *DefaultFormBuilder) CreateFormFileReader(fieldname string, r io.Reader return fb.createFormFile(fieldname, r, path.Base(filename)) } + +var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") + +func escapeQuotes(s string) string { + return quoteEscaper.Replace(s) +} + func (fb *DefaultFormBuilder) createFormFile(fieldname string, r io.Reader, filename string) error { if filename == "" { return fmt.Errorf("filename cannot be empty") } - - fieldWriter, err := fb.writer.CreateFormFile(fieldname, filename) + h := make(textproto.MIMEHeader) + h.Set("Content-Disposition", + fmt.Sprintf(`form-data; name="%s"; filename="%s"`, + escapeQuotes(fieldname), escapeQuotes(filename))) + h.Set("Content-Type", "image/png") + fieldWriter, err := fb.writer.CreatePart(h) if err != nil { return err } From 2780acb1df554f6cb8b8907fe2e2cefae21c4df5 Mon Sep 17 00:00:00 2001 From: Tanner Barnes Date: Mon, 28 Apr 2025 10:34:14 -0500 Subject: [PATCH 2/2] fixed the formatting --- internal/form_builder.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/form_builder.go b/internal/form_builder.go index 0bf958ef6..050f0affb 100644 --- a/internal/form_builder.go +++ b/internal/form_builder.go @@ -36,7 +36,6 @@ func (fb *DefaultFormBuilder) CreateFormFileReader(fieldname string, r io.Reader return fb.createFormFile(fieldname, r, path.Base(filename)) } - var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") func escapeQuotes(s string) string {