code: func (req *Request) MultipartForm() (*multipart.Form, error) {
  	if req.multipartForm != nil {
  		return req.multipartForm, nil
  	}
  
  	req.multipartFormBoundary = string(req.Header.MultipartFormBoundary())
  	if len(req.multipartFormBoundary) == 0 {
  		return nil, ErrNoMultipartForm
  	}
  
  	ce := req.Header.peek(strContentEncoding)
  	body := req.bodyBytes()
  	if bytes.Equal(ce, strGzip) {
  		// Do not care about memory usage here.
  		var err error
  		if body, err = AppendGunzipBytes(nil, body); err != nil {
  			return nil, fmt.Errorf("cannot gunzip request body: %s", err)
  		}
  	} else if len(ce) > 0 {
  		return nil, fmt.Errorf("unsupported Content-Encoding: %q", ce)
  	}
  
  	f, err := readMultipartForm(bytes.NewReader(body), req.multipartFormBoundary, len(body), len(body))
  	if err != nil {
  		return nil, err
  	}
  	req.multipartForm = f
  	return f, nil
  }
docs: // MultipartForm returns requests's multipart form.
  //
  // Returns ErrNoMultipartForm if request's Content-Type
  // isn't 'multipart/form-data'.
  //
  // RemoveMultipartFormFiles must be called after returned multipart form
  // is processed.