소스 검색

feat:添加目录扫描接口

pull/1/head
yuan_rh 4 년 전
부모
커밋
f6e565a848
3개의 변경된 파일115개의 추가작업 그리고 2개의 파일을 삭제
  1. +76
    -2
      handle/handle.go
  2. +1
    -0
      main.go
  3. +38
    -0
      websocket/websocket.go

+ 76
- 2
handle/handle.go 파일 보기

@@ -11,6 +11,7 @@ import (
"log"
"os"
"os/exec"
"path"
"path/filepath"
"strconv"
"strings"
@@ -477,14 +478,87 @@ func copyAndCapture(w io.Writer, r io.Reader, progress chan string) ([]byte, err
}

/**
运行变更生效
单个文件信息
*/
type simpleFileInfo struct {
Name string `json:"name" `
Extension string `json:"extension"`
RelativePath string `json:"relativePath"`
AbsolutePath string `json:"absolutePath"`
}

var gobalFolderFileMap = make(map[string] *simpleFileInfo)
var gobalRelativePath string
/**
获取指定目录或文件的文件信息,如果是目录递归获取文件信息
@param id 文件id
*/
func NotifyFileChange(id string, changeType int){
func GetFolderFileInfo(conn *websocket.Conn,absolutePath string) error{

fileInfo,err :=os.Stat(absolutePath)
if err!=nil{
log.Println(err)
return err
}

log.Println(filepath.Dir(absolutePath))
//单个文件处理

if !fileInfo.IsDir() {
simpleFileInfo := new(simpleFileInfo)
simpleFileInfo.Name=fileInfo.Name()
simpleFileInfo.Extension=path.Ext(absolutePath)
simpleFileInfo.RelativePath=""
simpleFileInfo.AbsolutePath=absolutePath
gobalFolderFileMap[absolutePath]=simpleFileInfo
bytes,err :=json.Marshal(gobalFolderFileMap)
if err != nil {
log.Println(err)
return err
}
if err := conn.WriteMessage(websocket.TextMessage, bytes); err != nil {
log.Println(err)
return err
}
return nil
}

//文件目录处理
gobalRelativePath = filepath.Dir(absolutePath)+"\\"
err =filepath.Walk(absolutePath, myWalkfunc)

if err != nil {
log.Println(err)
return err
}

bytes,err :=json.Marshal(gobalFolderFileMap)
if err != nil {
log.Println(err)
return err
}
if err := conn.WriteMessage(websocket.TextMessage, bytes); err != nil {
log.Println(err)
return err
}

return nil
}

func myWalkfunc(path string, info os.FileInfo, err error) error {

if info.IsDir()==false{
simpleFileInfo := new(simpleFileInfo)
simpleFileInfo.Name=info.Name()
simpleFileInfo.Extension=filepath.Ext(path)
simpleFileInfo.RelativePath=strings.Replace(path,gobalRelativePath,"",1)
simpleFileInfo.AbsolutePath=path
gobalFolderFileMap[path]=simpleFileInfo
return nil
}

return nil
}

/**
获取本地文件列表


+ 1
- 0
main.go 파일 보기

@@ -45,6 +45,7 @@ func main() {
http.HandleFunc("/subscriptionFileChange", websocket.SubscriptionFileChangeHandler)
http.HandleFunc("/download", websocket.DownloadHandler)
http.HandleFunc("/init", websocket.InitLocalWorkSpaceHandler)
http.HandleFunc("/getFolderFileInfo", websocket.GetFolderFileInfoHandler)

//服务端启动
log.Println("服务启动成功,监听端口7777,等待连接。")


+ 38
- 0
websocket/websocket.go 파일 보기

@@ -133,6 +133,44 @@ ERR:
conn.Close()
}

func GetFolderFileInfoHandler(w http.ResponseWriter, r *http.Request) {
//w.Write([]byte("hello"))
//收到http请求(upgrade),完成websocket协议转换
//在应答的header中放上upgrade:websoket
var (
conn *websocket.Conn
err error
//msgType int
data []byte
)
if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
//报错了,直接返回底层的websocket链接就会终断掉
return
}
//得到了websocket.Conn长连接的对象,实现数据的收发
for {
//Text(json), Binary
//if _, data, err = conn.ReadMessage(); err != nil {
if _, data, err = conn.ReadMessage(); err != nil {
//报错关闭websocket
goto ERR
}
//发送数据,判断返回值是否报错
log.Println("param GetFolderFileInfo:"+string(data))

err := handle.GetFolderFileInfo(conn,string(data))
if err!=nil{
log.Println(err)
goto ERR
}

goto ERR
}
//error的标签
ERR:
conn.Close()
}

func SubscriptionFileChangeHandler(w http.ResponseWriter, r *http.Request){
//w.Write([]byte("hello"))
//收到http请求(upgrade),完成websocket协议转换


불러오는 중...
취소
저장