|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package handler |
|
|
|
|
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"fmt" |
|
|
|
"html/template" |
|
|
|
"net" |
|
|
|
@ -119,34 +120,11 @@ func Supfile(w http.ResponseWriter, r *http.Request) { |
|
|
|
// 替换 反斜杠
|
|
|
|
bbpath := strings.Replace(bpath, "/", "\\", -1) |
|
|
|
// 拼装, 文件的实际地址
|
|
|
|
ziprl := filepath.Join(bbpath, "/", bfile) |
|
|
|
ziprl := filepath.Join(config.G.FilePath, bbpath, "/", bfile) |
|
|
|
|
|
|
|
// 1、获取udp addr
|
|
|
|
remoteAddr, err := net.ResolveUDPAddr("udp", serip[0]+":9099") |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Failed to resolve %s: %v\n", serip[0], err) |
|
|
|
return |
|
|
|
} |
|
|
|
// 2、 监听端口
|
|
|
|
conn, err := net.DialUDP("udp", nil, remoteAddr) |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Failed to dial %s: %v\n", serip[0], err) |
|
|
|
return |
|
|
|
} |
|
|
|
defer conn.Close() |
|
|
|
// 3、在端口发送数据
|
|
|
|
message := fmt.Sprintf("%s%s%s", config.G.DeviceName, "|", "sender") |
|
|
|
// 向链接通道发送数据 数据包头
|
|
|
|
conn.Write([]byte(message)) |
|
|
|
// 发送文件
|
|
|
|
go func() { |
|
|
|
err := transfer.SendFiles(ziprl, fmt.Sprintf("http://%s", remoteAddr)) |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Send file to %s error: %s\n", remoteAddr, err) |
|
|
|
} |
|
|
|
}() |
|
|
|
// 页面上显示
|
|
|
|
fmt.Fprintf(w, "File:%s\\/%s,been sent successfully.", sbfile, sbpath) |
|
|
|
// 创建udp 渠道发送数据
|
|
|
|
message := fmt.Sprintf("%s%s%s", "xdml|", bbpath, "|sender") |
|
|
|
UdpSendFile(serip[0], ziprl, bfile, message, w) |
|
|
|
fmt.Fprintf(w, "deubg.....") |
|
|
|
|
|
|
|
} |
|
|
|
@ -218,32 +196,8 @@ func SendZip(w http.ResponseWriter, r *http.Request) { |
|
|
|
if strings.EqualFold(strings.ToLower(rest), "arcok") { |
|
|
|
fmt.Println("archive is sending...") |
|
|
|
// 创建udp 渠道发送数据
|
|
|
|
// 1、获取udp addr
|
|
|
|
remoteAddr, err := net.ResolveUDPAddr("udp", serip[0]+":9099") |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Failed to resolve %s: %v\n", serip[0], err) |
|
|
|
return |
|
|
|
} |
|
|
|
// 2、 监听端口
|
|
|
|
conn, err := net.DialUDP("udp", nil, remoteAddr) |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Failed to dial %s: %v\n", serip[0], err) |
|
|
|
return |
|
|
|
} |
|
|
|
defer conn.Close() |
|
|
|
// 3、在端口发送数据
|
|
|
|
message := fmt.Sprintf("%s%s%s", config.G.DeviceName, "|", "sender") |
|
|
|
// 向链接通道发送数据 数据包头
|
|
|
|
conn.Write([]byte(message)) |
|
|
|
// 发送文件
|
|
|
|
go func() { |
|
|
|
err := transfer.SendFiles(ziprl, fmt.Sprintf("http://%s", remoteAddr)) |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Send file to %s error: %s\n", remoteAddr, err) |
|
|
|
} |
|
|
|
}() |
|
|
|
// 页面上显示
|
|
|
|
fmt.Fprintf(w, "File:%s,been sent successfully.", zpFileName) |
|
|
|
UdpSendFile(serip[0], ziprl, zpFileName, message, w) |
|
|
|
} else { |
|
|
|
fmt.Println("archive is not exist!!!") |
|
|
|
} |
|
|
|
@ -309,3 +263,54 @@ func SendHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// // 定义错误返回的json
|
|
|
|
type ErrJson struct { |
|
|
|
Msg string `json:"message"` |
|
|
|
} |
|
|
|
|
|
|
|
// udp 模式发送文件
|
|
|
|
/* |
|
|
|
* serip 服务器ip, |
|
|
|
* absfilepath 发送文件的时间路径, |
|
|
|
* fname 文件名 |
|
|
|
* message 携带部分信息的消息 |
|
|
|
* http.ResponseWriter |
|
|
|
*/ |
|
|
|
func UdpSendFile(serip string, absfilepath string, fname string, message string, w http.ResponseWriter) { |
|
|
|
|
|
|
|
// 1、获取udp addr
|
|
|
|
remoteAddr, err := net.ResolveUDPAddr("udp", serip+":9099") |
|
|
|
if err != nil { |
|
|
|
mstr := fmt.Sprintf("Failed to resolve %s:%v", serip, err) |
|
|
|
erjson := ErrJson{mstr} |
|
|
|
outmsg, _ := json.Marshal(erjson) |
|
|
|
w.Header().Set("Content-Type", "application/json") |
|
|
|
w.Write(outmsg) |
|
|
|
return |
|
|
|
} |
|
|
|
// 2、 监听端口
|
|
|
|
conn, err := net.DialUDP("udp", nil, remoteAddr) |
|
|
|
if err != nil { |
|
|
|
ustr := fmt.Sprintf("Failed to dial %s: %v", serip, err) |
|
|
|
erjson := ErrJson{ustr} |
|
|
|
outmsg, _ := json.Marshal(erjson) |
|
|
|
w.Header().Set("Content-Type", "application/json") |
|
|
|
w.Write(outmsg) |
|
|
|
return |
|
|
|
} |
|
|
|
defer conn.Close() |
|
|
|
// 3、在端口发送数据
|
|
|
|
//message := fmt.Sprintf("%s%s%s", config.G.DeviceName, "|", "sender")
|
|
|
|
// 向链接通道发送数据 数据包头
|
|
|
|
conn.Write([]byte(message)) |
|
|
|
// 发送文件
|
|
|
|
go func() { |
|
|
|
err := transfer.SendFiles(absfilepath, fmt.Sprintf("http://%s", remoteAddr)) |
|
|
|
if err != nil { |
|
|
|
fmt.Printf("Send file to %s error: %s\n", remoteAddr, err) |
|
|
|
} |
|
|
|
}() |
|
|
|
// 页面上显示
|
|
|
|
fmt.Fprintf(w, "File:%s,been sent successfully.", fname) |
|
|
|
} |
|
|
|
|