From 5bd9405f42b0f0a6c1b08e8c4b7709f87e3f5d72 Mon Sep 17 00:00:00 2001 From: Vincent Composieux Date: Tue, 8 Jan 2019 09:51:01 +0100 Subject: [PATCH] Added real MIME type guessing --- middleware.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/middleware.go b/middleware.go index ed246dc..0d5f9c3 100644 --- a/middleware.go +++ b/middleware.go @@ -170,6 +170,13 @@ func mapTemporaryFileToOperations() error { } defer file.Close() + mimeType, err := getMimeType(file) + if err != nil { + fmt.Println(err) + + return fmt.Errorf("Unable to detect file MIME type. Reason: %v", err) + } + data, err := ioutil.ReadAll(file) if err != nil { return fmt.Errorf("Could not read multipart file. Reason: %v", err) @@ -186,7 +193,7 @@ func mapTemporaryFileToOperations() error { } upload := &GraphQLUpload{ - MIMEType: handle.Header.Get("Content-Type"), + MIMEType: mimeType, Filename: handle.Filename, Filepath: f.Name(), } @@ -197,3 +204,13 @@ func mapTemporaryFileToOperations() error { return nil } + +func getMimeType(file multipart.File) (string, error) { + buffer := make([]byte, 512) + n, err := file.Read(buffer) + if err != nil { + return "", err + } + + return http.DetectContentType(buffer[:n]), nil +}