diff --git a/fssc/fssc b/fssc/fssc
index 78eab76..c768de0 100644
Binary files a/fssc/fssc and b/fssc/fssc differ
diff --git a/fsv2/fstc b/fsv2/fstc
index aff7256..ac35de4 100644
Binary files a/fsv2/fstc and b/fsv2/fstc differ
diff --git a/fsv2/handler/handler.go b/fsv2/handler/handler.go
index 5586c8b..d82a721 100644
--- a/fsv2/handler/handler.go
+++ b/fsv2/handler/handler.go
@@ -6,18 +6,13 @@ import (
"html/template"
"io"
"mime"
- "net"
- "path"
"strings"
- "time"
"net/http"
- "net/rpc"
"os"
"path/filepath"
"xtcfs/config"
- "xtcfs/transfer"
"xtcfs/util"
"github.com/chyok/st/web"
@@ -97,18 +92,25 @@ func ReceiveHandler(w http.ResponseWriter, r *http.Request) {
}
filename := filepath.FromSlash(params["filename"])
+ // fpath
+ bfpath := r.Header.Get("Fpath")
+
//debug
- fmt.Printf("header params:%v", r.Header)
+ fmt.Printf("header params:%v\n", r.Header)
+ fmt.Printf("fpath is:%s,afbs64 is:%s\n", bfpath, util.Base64dec(bfpath))
fmt.Printf("Downloading [%s]...\n", filename)
- dirPath := filepath.Dir(filename)
+ // 拼装完整路径
+ nfname := filepath.Join(config.G.FilePath, util.Base64dec(bfpath))
+ dirPath := filepath.Dir(nfname)
+ //dirPath := filepath.Dir(filename)
err = os.MkdirAll(dirPath, os.ModePerm)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- out, err := os.Create(filename)
+ out, err := os.Create(nfname)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -135,7 +137,7 @@ func ReceiveHandler(w http.ResponseWriter, r *http.Request) {
}
// 输出接收结果
- fmt.Fprintf(w, "接收成功,并已经完成解压缩")
+ // fmt.Fprintf(w, "接收成功,并已经完成解压缩")
}
// 文件服务
@@ -158,156 +160,6 @@ func FileServerHandler(w http.ResponseWriter, r *http.Request) {
}
}
-// udp 方式发送zip文件
-func SendZip(w http.ResponseWriter, r *http.Request) {
- r.ParseForm()
- // 选择文件,并生成zip包
- // 文件
- zipfarr := r.Form["zipfiles"]
- // 服务器ip地址
- serip := r.Form["serverip"]
- if serip[0] == "" {
- http.Error(w, "remote server ip is blank!", http.StatusInternalServerError)
- return
- }
- // 选中的路径
- wtculpath := r.Form["curpath"]
-
- // 实际路径
- realFilePath := filepath.Join(config.G.FilePath, wtculpath[0])
-
- // zip 文件名
- zpFileName := "BIU_" + time.Now().Format("20060102_150405") + ".zip"
-
- // 创建zip 异步?
- taskId := make(chan string)
- go func() {
- util.CompressToZip(zpFileName, realFilePath, zipfarr)
- taskId <- "arcok"
- // fmt.Fprintln(w, "create archive:", err)
- }()
- // go util.CompressToZip(zpFileName, realFilePath, zipfarr)
- fmt.Println("archive is createding...")
-
- // ZIP 文件的实际路径
- ziprl := path.Join("./files/", zpFileName)
-
- // zip 创建成功后
- rest := <-taskId
- // 有压缩包 才可以操作
- 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)
- } else {
- fmt.Println("archive is not exist!!!")
- }
-
-}
-
-// 下载zip
-func Downzip(w http.ResponseWriter, r *http.Request) {
- r.ParseForm()
- // 选择文件,并生成zip包
- // 文件
- zipfarr := r.Form["zipfiles"]
- // 服务器ip地址
- serip := r.Form["serverip"]
- if serip[0] == "" {
- http.Error(w, "remote server ip is blank!", http.StatusInternalServerError)
- return
- }
- // fmt.Println(r.Form)
- // 选中的路径
- wtculpath := r.Form["curpath"]
-
- // 实际路径
- realFilePath := filepath.Join(config.G.FilePath, wtculpath[0])
-
- // zip 文件名
- zpFileName := "BIU_" + time.Now().Format("20060102_150405") + ".zip"
-
- // 创建zip
- err := util.CompressToZip(zpFileName, realFilePath, zipfarr)
- if err != nil {
- fmt.Println("create zip error", err)
- }
- // 停止下,检查zip是否创建成功
- time.Sleep(1200)
- _, err = os.Stat(realFilePath + "/" + zpFileName)
- if err != nil {
-
- // 调用httpd rpc
- fmt.Println("RPC Server IP:", serip[0])
- rpcServer := serip[0] + ":9080"
- client, err := rpc.DialHTTP("tcp", rpcServer)
- if err != nil {
- fmt.Println("Http rpc error :", err)
- }
- // 组装url 静态文件
- // url := "http://" + config.G.LocalIP + ":" + config.G.Port + "/files/" + zpFileName
- // 动态
- url := "http://" + config.G.LocalIP + ":" + config.G.Port + "/files?zp=" + zpFileName
- args := Args{url, zpFileName}
- var reply int
- err = client.Call("Rbup.DecompressZip", args, &reply)
- if err != nil {
- fmt.Println("rpc call error :", err)
- // 输出执行结果
- fmt.Fprintln(w, "rpc call error:", err)
- } else {
- // 输出下载链接
- fmt.Fprintf(w, "%s
\n", url, url)
- fmt.Fprintf(w, "RPC execute result :%d
\n", reply)
- }
- } else {
- fmt.Fprintf(w, "archive is created faild")
- }
-
-}
-
-// 文件下载
-func Dfiles(w http.ResponseWriter, r *http.Request) {
- // url中获取参数
- query := r.URL.Query()
- zpfile := query.Get("zp")
-
- // 实际路径
- zpFileName := filepath.Join(config.G.FilePath, "/files/", zpfile)
- // fileInfo, err := os.Stat(zpFileName)
- // if err != nil {
- // http.Error(w, err.Error(), http.StatusInternalServerError)
- // return
- // }
- // fmt.Println(fileInfo)
- http.ServeFile(w, r, zpFileName)
-}
-
// 发送拦截
func SendHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
diff --git a/fsv2/main.go b/fsv2/main.go
index 5f66f19..da4f74b 100644
--- a/fsv2/main.go
+++ b/fsv2/main.go
@@ -6,7 +6,6 @@ import (
"os"
"xtcfs/config"
- "xtcfs/discovery"
"xtcfs/handler"
"github.com/urfave/cli/v2"
@@ -24,7 +23,7 @@ func initConfig(c *cli.Context) error {
// 目标接收端,接收发送来的文件
func receiveClient() error {
// 加入udp 监听
- go discovery.Listen()
+ //go discovery.Listen()
// 显示状态等
http.HandleFunc("/", handler.ReceiveHandler)