目录搜索
archivearchive/tararchive/zipbufiobufio(缓存)builtinbuiltin(内置包)bytesbytes(包字节)compresscompress/bzip2(压缩/bzip2)compress/flate(压缩/flate)compress/gzip(压缩/gzip)compress/lzw(压缩/lzw)compress/zlib(压缩/zlib)containercontainer/heap(容器数据结构heap)container/list(容器数据结构list)container/ring(容器数据结构ring)contextcontext(上下文)cryptocrypto(加密)crypto/aes(加密/aes)crypto/cipher(加密/cipher)crypto/des(加密/des)crypto/dsa(加密/dsa)crypto/ecdsa(加密/ecdsa)crypto/elliptic(加密/elliptic)crypto/hmac(加密/hmac)crypto/md5(加密/md5)crypto/rand(加密/rand)crypto/rc4(加密/rc4)crypto/rsa(加密/rsa)crypto/sha1(加密/sha1)crypto/sha256(加密/sha256)crypto/sha512(加密/sha512)crypto/subtle(加密/subtle)crypto/tls(加密/tls)crypto/x509(加密/x509)crypto/x509/pkix(加密/x509/pkix)databasedatabase/sql(数据库/sql)database/sql/driver(数据库/sql/driver)debugdebug/dwarf(调试/dwarf)debug/elf(调试/elf)debug/gosym(调试/gosym)debug/macho(调试/macho)debug/pe(调试/pe)debug/plan9obj(调试/plan9obj)encodingencoding(编码)encoding/ascii85(编码/ascii85)encoding/asn1(编码/asn1)encoding/base32(编码/base32)encoding/base64(编码/base64)encoding/binary(编码/binary)encoding/csv(编码/csv)encoding/gob(编码/gob)encoding/hex(编码/hex)encoding/json(编码/json)encoding/pem(编码/pem)encoding/xml(编码/xml)errorserrors(错误)expvarexpvarflagflag(命令行参数解析flag包)fmtfmtgogo/ast(抽象语法树)go/buildgo/constant(常量)go/doc(文档)go/format(格式)go/importergo/parsergo/printergo/scanner(扫描仪)go/token(令牌)go/types(类型)hashhash(散列)hash/adler32hash/crc32hash/crc64hash/fnvhtmlhtmlhtml/template(模板)imageimage(图像)image/color(颜色)image/color/palette(调色板)image/draw(绘图)image/gifimage/jpegimage/pngindexindex/suffixarrayioioio/ioutillogloglog/syslog(日志系统)mathmathmath/bigmath/bigmath/bitsmath/bitsmath/cmplxmath/cmplxmath/randmath/randmimemimemime/multipart(多部分)mime/quotedprintablenetnetnet/httpnet/httpnet/http/cginet/http/cookiejarnet/http/fcginet/http/httptestnet/http/httptracenet/http/httputilnet/http/internalnet/http/pprofnet/mailnet/mailnet/rpcnet/rpcnet/rpc/jsonrpcnet/smtpnet/smtpnet/textprotonet/textprotonet/urlnet/urlososos/execos/signalos/userpathpathpath/filepath(文件路径)pluginplugin(插件)reflectreflect(反射)regexpregexp(正则表达式)regexp/syntaxruntimeruntime(运行时)runtime/debug(调试)runtime/internal/sysruntime/pprofruntime/race(竞争)runtime/trace(执行追踪器)sortsort(排序算法)strconvstrconv(转换)stringsstrings(字符串)syncsync(同步)sync/atomic(原子操作)syscallsyscall(系统调用)testingtesting(测试)testing/iotesttesting/quicktexttext/scanner(扫描文本)text/tabwritertext/template(定义模板)text/template/parsetimetime(时间戳)unicodeunicodeunicode/utf16unicode/utf8unsafeunsafe
文字

  • import "mime/multipart"

  • 概述

  • 索引

  • 例子

概述

Package multipart实现了RFC 2046中定义的MIME多部分解析。

对于HTTP(RFC 2388)和由流行浏览器生成的多部分机构来说,这个实现就足够了。

索引

  • 变量

  • type File

  • type FileHeader

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

  • type Form

  • func (f *Form) RemoveAll() error

  • type Part

  • func (p *Part) Close() error

  • func (p *Part) FileName() string

  • func (p *Part) FormName() string

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

  • type Reader

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

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

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

  • type Writer

  • func NewWriter(w io.Writer) *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

例子

NewReader

文件包

formdata.go multipart.go writer.go

变量

如果消息表单数据太大而无法处理,则ErrMessageTooLarge由ReadForm返回。

var ErrMessageTooLarge = errors.New("multipart: message too large")

type File

文件是访问多部分消息的文件部分的接口。其内容可以存储在内存中或磁盘上。如果存储在磁盘上,则文件的基础具体类型将是* os.File。

type File interface {
        io.Reader
        io.ReaderAt
        io.Seeker
        io.Closer}

type FileHeader

FileHeader描述多部分请求的文件部分。

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

func (*FileHeader) Open

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

打开并返回FileHeader的关联文件。

type Form

表单是一个解析的多部分表单。它的File部分存储在内存中或磁盘上,并可通过* FileHeader的Open方法访问。其Value部分以字符串形式存储。两者都以字段名称为关键字。

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

func (*Form) RemoveAll

func (f *Form) RemoveAll() error

RemoveAll删除与表单关联的所有临时文件。

type Part

零件表示多部分机构中的单个零件。

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

func (p *Part) FileName() string

FileName返回零件的Content-Disposition标题的文件名参数。

func (*Part) FormName

func (p *Part) FormName() string

如果p有一个类型为“form-data”的Content-Disposition,FormName将返回name参数。否则,它返回空字符串。

func (*Part) Read

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

Read读取零件的正文,在其标题之后和下一部分(如果有)开始之前。

type Reader

Reader是MIME多部分主体中的部分迭代器。Reader的底层解析器根据需要使用它的输入。寻求不支持。

type Reader struct {        // contains filtered or unexported fields}

func NewReader

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

NewReader使用给定的MIME边界从r创建新的多部分读取器读取。

边界通常从消息的“Content-Type”头部的“边界”参数获得。使用mime.ParseMediaType来解析这些标题。

package mainimport ("fmt""io""io/ioutil""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 := ioutil.ReadAll(p)if err != nil {
				log.Fatal(err)}
			fmt.Printf("Part %q: %q\n", p.Header.Get("Foo"), slurp)}}}

func (*Reader) NextPart

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

NextPart返回多部分中的下一部分或错误。当没有更多的零件时,返回错误io.EOF。

func (*Reader) ReadForm

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

ReadForm解析整个多部分消息,其部分具有“form-data”的内容处置。它在内存中存储最大内存字节数+ 10MB(为非文件部分保留)。无法存储在内存中的文件将以临时文件的形式存储在磁盘上。如果所有非文件部分都不能存储在内存中,它将返回ErrMessageTooLarge。

type Writer

Writer生成多部分消息。

type Writer struct {        // contains filtered or unexported fields}

func NewWriter

func NewWriter(w io.Writer) *Writer

NewWriter返回一个新的具有随机边界的多部分写入器,写入w。

func (*Writer) Boundary

func (w *Writer) Boundary() string

Boundary返回 Writer的边界。

func (*Writer) Close

func (w *Writer) Close() error

关闭完成多部分消息并将尾部边界结束行写入输出。

func (*Writer) CreateFormField

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

CreateFormField使用给定的字段名称调用带有标题的CreatePart。

func (*Writer) CreateFormFile

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

CreateFormFile是CreatePart的一个便捷包装。它使用提供的字段名称和文件名创建一个新的表单数据标题。

func (*Writer) CreatePart

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

CreatePart使用提供的标题创建一个新的多部分部分。该部分的主体应写入返回的Writer。调用CreatePart之后,可能不再写入任何以前的部分。

func (*Writer) FormDataContentType

func (w *Writer) FormDataContentType() string

FormDataContentType返回具有该Writer边界的HTTP multipart / form-data的Content-Type。

func (*Writer) SetBoundary

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

SetBoundary用显式值覆盖Writer的默认随机生成边界分隔符。

必须在创建任何部件之前调用SetBoundary,可能只包含某些ASCII字符,并且必须非空且最多70个字节。

func (*Writer) WriteField

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

WriteField调用CreateFormField,然后写入给定的值。

上一篇:下一篇: