开始解析文件
var reg_name = regexp.MustCompile(`filename="(.+)"`)
func fileinfo(c *gin.Context) (filename string, flag []byte, rd *bufio.Reader) {
rd = bufio.NewReader(c.Request.Body)
line, _ := rd.ReadBytes('\n')
flag = line[0 : len(line)-2] //开始结束标记
line, _ = rd.ReadBytes('\n')
filenames := reg_name.FindStringSubmatch(string(line))//正则解析文件名
filename = filenames[1]
//Content-Disposition: form-data; name="file"; filename="上传文件名.txt"
rd.ReadBytes('\n') //文件类型
rd.ReadBytes('\n') //跳过换行符
return
}
开始写入文件流
func savefile(buf *bufio.Reader, flag []byte, src string) error {
f, err := os.OpenFile(src, os.O_WRONLY|os.O_APPEND|os.O_CREATE|os.O_EXCL, os.ModePerm) //创建文件
if err != nil {
return err
}
defer f.Close()
buf_b := make([]byte, 1024*8)
for {
n, _ := buf.Read(buf_b)
if z := bytes.Index(buf_b, flag); z >= 0 { //判断结束标记
f.Write(buf_b[:z-2])
f.Sync()
break
}
f.Write(buf_b[:n])
if n <= 0 {
break
}
}
return nil
}
