Run Format

Package multipart

import "mime/multipart"

Overview ▾

Package multipart implements MIME multipart parsing, as defined in RFC 2046.

The implementation is sufficient for HTTP (RFC 2388) and the multipart bodies generated by popular browsers.

type File

File is an interface to access the file part of a multipart message. Its contents may be either stored in memory or on disk. If stored on disk, the File's underlying concrete type will be an *os.File.

type File interface {

type FileHeader

A FileHeader describes a file part of a multipart request.

type FileHeader struct {
        Filename string
        Header   textproto.MIMEHeader
        // contains filtered or unexported fields

func (*FileHeader) Open

Open opens and returns the FileHeader's associated File.

func (fh *FileHeader) Open() (File, error)

type Form

Form is a parsed multipart form. Its File parts are stored either in memory or on disk, and are accessible via the *FileHeader's Open method. Its Value parts are stored as strings. Both are keyed by field name.

type Form struct {
        Value map[string][]string
        File  map[string][]*FileHeader

func (*Form) RemoveAll

RemoveAll removes any temporary files associated with a Form.

func (f *Form) RemoveAll() error

type Part

A Part represents a single part in a multipart body.

type Part struct {
        // The headers of the body, if any, with the keys canonicalized
        // in the same fashion that the Go http.Request headers are.
        // For example, "foo-bar" changes case to "Foo-Bar"
        // As a special case, if the "Content-Transfer-Encoding" header
        // has a value of "quoted-printable", that header is instead
        // hidden from this map and the body is transparently decoded
        // during Read calls.
        Header textproto.MIMEHeader
        // contains filtered or unexported fields

func (*Part) Close

func (p *Part) Close() error

func (*Part) FileName

FileName returns the filename parameter of the Part's Content-Disposition header.

func (p *Part) FileName() string

func (*Part) FormName

FormName returns the name parameter if p has a Content-Disposition of type "form-data". Otherwise it returns the empty string.

func (p *Part) FormName() string

func (*Part) Read

Read reads the body of a part, after its headers and before the next part (if any) begins.

func (p *Part) Read(d []byte) (n int, err error)

type Reader

Reader is an iterator over parts in a MIME multipart body. Reader's underlying parser consumes its input as needed. Seeking isn't supported.

type Reader struct {
        // contains filtered or unexported fields

func NewReader

NewReader creates a new multipart Reader reading from r using the given MIME boundary.

The boundary is usually obtained from the "boundary" parameter of the message's "Content-Type" header. Use mime.ParseMediaType to parse such headers.

func NewReader(r io.Reader, boundary string) *Reader


Part "one": "A section"
Part "two": "And another"

func (*Reader) NextPart

NextPart returns the next part in the multipart or an error. When there are no more parts, the error io.EOF is returned.

func (r *Reader) NextPart() (*Part, error)

func (*Reader) ReadForm

ReadForm parses an entire multipart message whose parts have a Content-Disposition of "form-data". It stores up to maxMemory bytes of the file parts in memory and the remainder on disk in temporary files.

func (r *Reader) ReadForm(maxMemory int64) (*Form, error)

type Writer

A Writer generates multipart messages.

type Writer struct {
        // contains filtered or unexported fields

func NewWriter

NewWriter returns a new multipart Writer with a random boundary, writing to w.

func NewWriter(w io.Writer) *Writer

func (*Writer) Boundary

Boundary returns the Writer's boundary.

func (w *Writer) Boundary() string

func (*Writer) Close

Close finishes the multipart message and writes the trailing boundary end line to the output.

func (w *Writer) Close() error

func (*Writer) CreateFormField

CreateFormField calls CreatePart with a header using the given field name.

func (w *Writer) CreateFormField(fieldname string) (io.Writer, error)

func (*Writer) CreateFormFile

CreateFormFile is a convenience wrapper around CreatePart. It creates a new form-data header with the provided field name and file name.

func (w *Writer) CreateFormFile(fieldname, filename string) (io.Writer, error)

func (*Writer) CreatePart

CreatePart creates a new multipart section with the provided header. The body of the part should be written to the returned Writer. After calling CreatePart, any previous part may no longer be written to.

func (w *Writer) CreatePart(header textproto.MIMEHeader) (io.Writer, error)

func (*Writer) FormDataContentType

FormDataContentType returns the Content-Type for an HTTP multipart/form-data with this Writer's Boundary.

func (w *Writer) FormDataContentType() string

func (*Writer) SetBoundary

SetBoundary overrides the Writer's default randomly-generated boundary separator with an explicit value.

SetBoundary must be called before any parts are created, may only contain certain ASCII characters, and must be non-empty and at most 69 bytes long.

func (w *Writer) SetBoundary(boundary string) error

func (*Writer) WriteField

WriteField calls CreateFormField and then writes the given value.

func (w *Writer) WriteField(fieldname, value string) error