func (b *MultipartBody) Read(p []byte) (n int, err error) {
	if b.content == nil {
		if b.Boundary == "" {
			b.Boundary = defaultBoundary
		}
		between := []byte("\r\n--" + b.Boundary + "\r\n")
		first := between[2:]
		end := []byte("\r\n--" + b.Boundary + "--\r\n")
		readers := make([]io.Reader, 0, len(b.Parts)*2+3)
		readers = append(readers, bytes.NewReader(first))
		for i, part := range b.Parts {
			if i > 0 {
				readers = append(readers, bytes.NewReader(between))
			}
			readers = append(readers, part)
		}
		readers = append(readers, bytes.NewReader(end))
		b.content = io.MultiReader(readers...)
	}
	return b.content.Read(p)
}
Read implements io.Reader interface.
package tdhttp
import (
	"bytes"
	"io"
	"net/http"
	"os"
	"path/filepath"
	"strings"
)
const (
	defaultMediaType = "multipart/form-data"
	defaultBoundary  = "go-testdeep-42"
)
type MultipartBody struct {
	MediaType string            
	Boundary  string            
	Parts     []*MultipartPart  
	content   io.Reader
}