multipart
packagestandard libraryThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Overview¶
Package multipart implements MIME multipart parsing, as defined inRFC2046.
The implementation is sufficient for HTTP (RFC 2388) and the multipartbodies generated by popular browsers.
Limits¶
To protect against malicious inputs, this package sets limits on the sizeof the MIME data it processes.
Reader.NextPart andReader.NextRawPart limit the number of headers in apart to 10000 andReader.ReadForm limits the total number of headers in allFileHeaders to 10000.These limits may be adjusted with the GODEBUG=multipartmaxheaders=<values>setting.
Reader.ReadForm further limits the number of parts in a form to 1000.This limit may be adjusted with the GODEBUG=multipartmaxparts=<value>setting.
Index¶
- Variables
- func FileContentDisposition(fieldname, filename string) string
- type File
- type FileHeader
- type Form
- type Part
- type Reader
- type Writer
- func (w *Writer) Boundary() string
- func (w *Writer) Close() error
- func (w *Writer) CreateFormField(fieldname string) (io.Writer, error)
- func (w *Writer) CreateFormFile(fieldname, filename string) (io.Writer, error)
- func (w *Writer) CreatePart(header textproto.MIMEHeader) (io.Writer, error)
- func (w *Writer) FormDataContentType() string
- func (w *Writer) SetBoundary(boundary string) error
- func (w *Writer) WriteField(fieldname, value string) error
Examples¶
Constants¶
This section is empty.
Variables¶
var ErrMessageTooLarge =errors.New("multipart: message too large")ErrMessageTooLarge is returned by ReadForm if the message formdata is too large to be processed.
Functions¶
funcFileContentDisposition¶added ingo1.25.0
FileContentDisposition returns the value of a Content-Disposition headerwith the provided field name and file name.
Types¶
typeFile¶
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.
typeFileHeader¶
type FileHeader struct {FilenamestringHeadertextproto.MIMEHeaderSizeint64// contains filtered or unexported fields}A FileHeader describes a file part of a multipart request.
func (*FileHeader)Open¶
func (fh *FileHeader) Open() (File,error)
Open opens and returns theFileHeader's associated File.
typeForm¶
type Form struct {Value map[string][]stringFile map[string][]*FileHeader}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.
typePart¶
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"Headertextproto.MIMEHeader// contains filtered or unexported fields}A Part represents a single part in a multipart body.
func (*Part)FileName¶
FileName returns the filename parameter of thePart's Content-Dispositionheader. If not empty, the filename is passed through filepath.Base (which isplatform dependent) before being returned.
typeReader¶
type Reader struct {// contains filtered or unexported fields}Reader is an iterator over parts in a MIME multipart body.Reader's underlying parser consumes its input as needed. Seekingisn't supported.
funcNewReader¶
NewReader creates a new multipartReader reading from r using thegiven MIME boundary.
The boundary is usually obtained from the "boundary" parameter ofthe message's "Content-Type" header. Usemime.ParseMediaType toparse such headers.
Example¶
package mainimport ("fmt""io""log""mime""mime/multipart""net/mail""strings")func main() {msg := &mail.Message{Header: map[string][]string{"Content-Type": {"multipart/mixed; boundary=foo"},},Body: strings.NewReader("--foo\r\nFoo: one\r\n\r\nA section\r\n" +"--foo\r\nFoo: two\r\n\r\nAnd another\r\n" +"--foo--\r\n"),}mediaType, params, err := mime.ParseMediaType(msg.Header.Get("Content-Type"))if err != nil {log.Fatal(err)}if strings.HasPrefix(mediaType, "multipart/") {mr := multipart.NewReader(msg.Body, params["boundary"])for {p, err := mr.NextPart()if err == io.EOF {return}if err != nil {log.Fatal(err)}slurp, err := io.ReadAll(p)if err != nil {log.Fatal(err)}fmt.Printf("Part %q: %q\n", p.Header.Get("Foo"), slurp)}}}Output: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 errorio.EOF is returned.
As a special case, if the "Content-Transfer-Encoding" headerhas a value of "quoted-printable", that header is insteadhidden and the body is transparently decoded during Read calls.
func (*Reader)NextRawPart¶added ingo1.14
NextRawPart returns the next part in the multipart or an error.When there are no more parts, the errorio.EOF is returned.
UnlikeReader.NextPart, it does not have special handling for"Content-Transfer-Encoding: quoted-printable".
func (*Reader)ReadForm¶
ReadForm parses an entire multipart message whose parts havea Content-Disposition of "form-data".It stores up to maxMemory bytes + 10MB (reserved for non-file parts)in memory. File parts which can't be stored in memory will be stored ondisk in temporary files.It returnsErrMessageTooLarge if all non-file parts can't be stored inmemory.
typeWriter¶
type Writer struct {// contains filtered or unexported fields}A Writer generates multipart messages.
func (*Writer)Close¶
Close finishes the multipart message and writes the trailingboundary end line to the output.
func (*Writer)CreateFormField¶
CreateFormField callsWriter.CreatePart with a header using thegiven field name.
func (*Writer)CreateFormFile¶
CreateFormFile is a convenience wrapper aroundWriter.CreatePart. It createsa new form-data header with the provided field name and file name.
func (*Writer)CreatePart¶
CreatePart creates a new multipart section with the providedheader. The body of the part should be written to the returnedWriter. After calling CreatePart, any previous part may no longerbe written to.
func (*Writer)FormDataContentType¶
FormDataContentType returns the Content-Type for an HTTPmultipart/form-data with thisWriter's Boundary.
func (*Writer)SetBoundary¶added ingo1.1
SetBoundary overrides theWriter's default randomly-generatedboundary separator with an explicit value.
SetBoundary must be called before any parts are created, may onlycontain certain ASCII characters, and must be non-empty andat most 70 bytes long.
func (*Writer)WriteField¶
WriteField callsWriter.CreateFormField and then writes the given value.