ソースを参照

feature(文件传输): 文件传输修改

ZZH-wl 2 年 前
コミット
6099bbbab7
1 ファイル変更34 行追加8 行削除
  1. 34 8
      opms_libary/micro_srv/micro_srv.go

+ 34 - 8
opms_libary/micro_srv/micro_srv.go

@@ -6,6 +6,7 @@ import (
 	"dashoo.cn/opms_libary/multipart"
 	"encoding/json"
 	"errors"
+	"fmt"
 	"github.com/gogf/gf/util/gconv"
 	"io/ioutil"
 	"net"
@@ -146,9 +147,13 @@ func streamHandler(conn net.Conn, args *share.StreamServiceArgs) {
 
 			// 读取文件名
 			fileHeader := make([]byte, length)
-			_, err = conn.Read(fileHeader)
+			_, err := conn.Read(fileHeader)
 
 			headers := strings.Split(string(fileHeader), " ")
+			if len(headers) != 3 {
+				fmt.Println(form, "111111")
+				break
+			}
 			paramName := headers[0]
 			fileName := headers[1]
 			fileSize := headers[2]
@@ -163,24 +168,45 @@ func streamHandler(conn net.Conn, args *share.StreamServiceArgs) {
 			defer os.Remove(tmpFile.Name())
 
 			size, _ := strconv.Atoi(fileSize)
+			curSize := 0
+			for {
+				if curSize+1024 > size {
+					buf = make([]byte, size-curSize)
+					curSize = size
+				} else {
+					buf = make([]byte, 1024)
+					curSize = curSize + 1024
+				}
+				conn.Read(buf)
+				tmpFile.Write(buf)
+				if curSize == size {
+					break
+				}
+			}
 
-			buf = make([]byte, size)
-			conn.Read(buf)
-			tmpFile.Write(buf)
+			fmt.Println("1==============================")
 
 			form.File[paramName] = &multipart.FileHeader{FileName: fileName, FileSize: int64(size), File: tmpFile}
-
+			fmt.Println(form)
 			// 判断是否结束
 			isEnd := make([]byte, 1)
-			_, err = conn.Read(isEnd)
-			if err != nil || isEnd[0] == '1' {
+			conn.Read(isEnd)
+			fmt.Println(gconv.String(isEnd))
+			if gconv.String(isEnd) == "1" {
+				fmt.Println("2==============================")
 				continue
 			}
-			if isEnd[0] == '2' {
+			if gconv.String(isEnd) == "2" {
+				fmt.Println("3==============================")
 				break
 			}
+			fmt.Println("4==============================")
+
 		}
+		fmt.Println("5==============================")
+
 	}
+	fmt.Println("6==============================")
 
 	result := make([]byte, 0)
 	className, _ := args.Meta["reqService"]