go文件服务器mimetype,golang解析MIME数据格式的代码示例

MIME格式

MIME是multipurpose Internet mail extensions 的缩写。它是一种协议,可使电子邮件除包含一般纯文本以外,还可加上彩色图片、视频、声音或二进位格式的文件。它要求邮件的发送端和接收端必须有解读MIME协议的电子邮件程序。

本文介绍了如何使用golang来解析MIME以及multipart格式的数据。并给出了详细的示例代码。

MIME格式示例数据

解析boundary

使用net/textproto.Reader来解析。示例代码如下:

// 从textproto.Reader读取数据

func (m *MHtml) GetBoundary(r *textproto.Reader) string {

// 先调用ReadMIMEHeader来解析MIME的头信息

mimeHeader, err := r.ReadMIMEHeader()

if err != nil {

return ""

}

// 然后得到 "Content-Type"

fmt.Printf("%v %v\n", mimeHeader, err)

contentType := mimeHeader.Get("Content-Type")

fmt.Printf("Content-Type = %v %v\n", contentType)

// 再然后,调用 mime.ParseMediaType 来解析 "Content-Type"

mediatype, params, err := mime.ParseMediaType(contentType)

fmt.Printf("mediatype=%v, params=%v %v, err=%v\n", mediatype, len(params), params, err)

// 最最后,得到 boundary

boundary := params["boundary"]

fmt.Printf("boundary=%v\n", boundary)

return boundary

}

解析正文

使用mime/multipart.Reader来解析multipart格式的正文

mr := multipart.NewReader(br, boundary)

for {

part, err := mr.NextPart()

if err != nil {

break

}

d := make([]byte, len(mht))

n, err := part.Read(d)

if err != nil && err != io.EOF {

return err

}

d = d[:n]

fmt.Printf("filename=%v formname=%v n=%v err=%v content=\n", part.FileName(), part.FormName(), n, err)

contentType := part.Header["Content-Type"]

if len(contentType) == 0 {

continue

}

fmt.Printf("Content-Type=%v\n", contentType[0])

if contentType[0] == "text/html" {

m.Html = string(d)

break

}

}

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值