|
|
@@ -11,6 +11,7 @@ import (
|
|
|
"mime/multipart"
|
|
|
"net"
|
|
|
"net/http"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
"sync/atomic"
|
|
|
@@ -178,25 +179,51 @@ func getRequestToken(r *http.Request) string {
|
|
|
}
|
|
|
|
|
|
// sendFile
|
|
|
-func sendFile(conn net.Conn, file *multipart.FileHeader) error {
|
|
|
- // 只读打开文件
|
|
|
- f, err := file.Open()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- // 从本文件中,读数据,写给网络接收端。
|
|
|
- buf := make([]byte, 1024)
|
|
|
- for {
|
|
|
- n, err := f.Read(buf)
|
|
|
- if n == 0 {
|
|
|
- log.Debug("发送文件完成")
|
|
|
- return nil
|
|
|
+func sendFile(conn net.Conn, files map[string][]*multipart.FileHeader) error {
|
|
|
+ index := 0
|
|
|
+ for key, header := range files {
|
|
|
+ index++
|
|
|
+ file, _ := header[0].Open()
|
|
|
+ fileName := header[0].Filename
|
|
|
+ fileSize := header[0].Size
|
|
|
+ fileHeader := fmt.Sprintf("%s %s %v", key, fileName, fileSize)
|
|
|
+
|
|
|
+ // 发送文件名长度
|
|
|
+ length := strconv.Itoa(len(fileHeader))
|
|
|
+ conn.Write([]byte(PadLeft(length, 3, "0")))
|
|
|
+ // 发送文件名和文件长度给 接收端
|
|
|
+ conn.Write([]byte(fileHeader))
|
|
|
+
|
|
|
+ // 从本文件中,读数据,写给网络接收端。
|
|
|
+ buf := make([]byte, 1024)
|
|
|
+ for {
|
|
|
+ n, err := file.Read(buf)
|
|
|
+ if n == 0 {
|
|
|
+ log.Debug("发送文件完成")
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // 写到网络socket中
|
|
|
+ _, err = conn.Write(buf[:n])
|
|
|
+ if err != nil {
|
|
|
+ log.Debug("conn.Write err:", err)
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
- // 写到网络socket中
|
|
|
- _, err = conn.Write(buf[:n])
|
|
|
- if err != nil {
|
|
|
- log.Debug("conn.Write err:", err)
|
|
|
- return nil
|
|
|
+
|
|
|
+ if index == len(files) {
|
|
|
+ conn.Write([]byte("2"))
|
|
|
+ } else {
|
|
|
+ conn.Write([]byte("1"))
|
|
|
}
|
|
|
}
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func PadLeft(s string, length int, padding string) string {
|
|
|
+ sLen := len(s)
|
|
|
+ if sLen >= length {
|
|
|
+ return s
|
|
|
+ }
|
|
|
+ padCount := length - sLen
|
|
|
+ return strings.Repeat(padding, padCount) + s
|
|
|
}
|