Sfoglia il codice sorgente

优化实现没有文件是只接收表单数据

Cheng Jian 2 anni fa
parent
commit
f662b26e9e

+ 50 - 41
opms_libary/micro_srv/micro_srv.go

@@ -129,46 +129,54 @@ func streamHandler(conn net.Conn, args *share.StreamServiceArgs) {
 	args.Meta["userInfo"] = resp.DataString()
 	ctx = context.WithValue(ctx, share.ReqMetaDataKey, args.Meta)
 
-	var array = []*multipart.MultipartFile{}
-	for {
-		// 读取文件名长度
-		buf := make([]byte, 3)
-		conn.Read(buf)
-		length, _ := strconv.Atoi(strings.TrimSpace(string(buf)))
-
-		// 读取文件名
-		fileHeader := make([]byte, length)
-		_, err = conn.Read(fileHeader)
-
-		headers := strings.Split(string(fileHeader), " ")
-		paramName := headers[0]
-		fileName := headers[1]
-		fileSize := headers[2]
-
-		//获取文件后缀
-		suffix := path.Ext(fileName)
-		tmpFile, err := ioutil.TempFile(os.TempDir(), "multipart-*"+suffix)
-		if err != nil {
-			g.Log().Error(err)
-			return
-		}
-		defer os.Remove(tmpFile.Name())
-
-		size, _ := strconv.Atoi(fileSize)
-
-		buf = make([]byte, size)
-		conn.Read(buf)
-		tmpFile.Write(buf)
-		file := &multipart.MultipartFile{FileName: paramName, FileSize: gconv.Int64(fileSize), File: tmpFile, Meta: args.Meta}
-		_ = append(array, file)
-		// 判断是否结束
-		isEnd := make([]byte, 1)
-		_, err = conn.Read(isEnd)
-		if err != nil || isEnd[0] == '1' {
-			continue
-		}
-		if isEnd[0] == '2' {
-			break
+	var form = new(multipart.Form)
+	for key, value := range args.Meta {
+		form.Value[key][0] = value
+	}
+
+	fileNum := gconv.Int(args.Meta["fileNum"])
+	if fileNum > 0 {
+		for {
+			// 读取文件名长度
+			buf := make([]byte, 3)
+			conn.Read(buf)
+			length, _ := strconv.Atoi(strings.TrimSpace(string(buf)))
+
+			// 读取文件名
+			fileHeader := make([]byte, length)
+			_, err = conn.Read(fileHeader)
+
+			headers := strings.Split(string(fileHeader), " ")
+			paramName := headers[0]
+			fileName := headers[1]
+			fileSize := headers[2]
+
+			//获取文件后缀
+			suffix := path.Ext(fileName)
+			tmpFile, err := ioutil.TempFile(os.TempDir(), "multipart-*"+suffix)
+			if err != nil {
+				g.Log().Error(err)
+				return
+			}
+			defer os.Remove(tmpFile.Name())
+
+			size, _ := strconv.Atoi(fileSize)
+
+			buf = make([]byte, size)
+			conn.Read(buf)
+			tmpFile.Write(buf)
+
+			form.File[paramName][0] = &multipart.FileHeader{FileName: fileName, FileSize: int64(size), File: tmpFile}
+
+			// 判断是否结束
+			isEnd := make([]byte, 1)
+			_, err = conn.Read(isEnd)
+			if err != nil || isEnd[0] == '1' {
+				continue
+			}
+			if isEnd[0] == '2' {
+				break
+			}
 		}
 	}
 
@@ -178,7 +186,8 @@ func streamHandler(conn net.Conn, args *share.StreamServiceArgs) {
 	message := new(dynamic.Message)
 	message.ClassName = className
 	message.MethodName = methodName
-	message.Payload = array
+	message.Metadata = args.Meta
+	message.Payload = form
 	rsp, err := dynamic.Invoker.HandleInvoker(ctx, message)
 	if err != nil {
 		resp := make(map[string]interface{})

+ 0 - 10
opms_libary/multipart/file.go

@@ -1,10 +0,0 @@
-package multipart
-
-import "os"
-
-type MultipartFile struct {
-	FileName string
-	FileSize int64
-	File     *os.File
-	Meta     map[string]string
-}

+ 10 - 0
opms_libary/multipart/formdata.go

@@ -0,0 +1,10 @@
+package multipart
+
+import "os"
+
+type MultipartFile struct {
+	ParamName string
+	FileName  string
+	FileSize  int64
+	File      *os.File
+}