package main import ( "bytes" "fmt" "io" "log" "mime/multipart" "net/http" "os" "path/filepath" ) // Creates a new file upload http request with optional extra params func newfileUploadRequest ( uri string , params map [ string ] string , paramName , path string ) (* http . Request , error ) { file , err := os . Open ( path ) if err != nil { return nil , err } defer file . Close () body := & bytes . Buffer {} writer := multipart . NewWriter ( body ) part , err := writer . CreateFormFile ( paramName , filepath . Base ( path )) if err != nil { return nil , err } _ , err = io . Copy ( part , file ) for key , val := range params { _ = writer . WriteField ( key , val ) } err = writer . Close () if err != nil { return nil , err } req , err := ...