开始解析文件
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 }