4 changed files with 107 additions and 1 deletions
Binary file not shown.
@ -0,0 +1,102 @@ |
|||||
|
package handler |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"fmt" |
||||
|
"net/http" |
||||
|
"os" |
||||
|
"path/filepath" |
||||
|
"strings" |
||||
|
"xtcfs/config" |
||||
|
) |
||||
|
|
||||
|
// json 结构体
|
||||
|
type Response struct { |
||||
|
Status string `json:"status"` //状态
|
||||
|
Data FilesListJson `json:"data"` //目录下的文件
|
||||
|
Scdir string `json:"curdir"` // 扫描的目录
|
||||
|
} |
||||
|
|
||||
|
// 文件输出的结构
|
||||
|
type FileJson struct { |
||||
|
Fname string `json:"fname"` |
||||
|
Dirflag string `json:"dirflag"` |
||||
|
} |
||||
|
|
||||
|
type FilesListJson struct { |
||||
|
Flist []FileJson `json:"list"` |
||||
|
} |
||||
|
|
||||
|
// 遍历监视目录,发送到json中
|
||||
|
func SerInfo(w http.ResponseWriter, r *http.Request) { |
||||
|
// 监听的目录通过?p=的方式传入
|
||||
|
//urlpath := r.Header.Get("p")
|
||||
|
urlpath := r.URL.Query().Get("p") |
||||
|
upath := strings.TrimSuffix(urlpath, "nf") |
||||
|
fmt.Printf("upath is %s\n", upath) |
||||
|
// 监听的根目录
|
||||
|
realFilePath := filepath.Join(config.G.FilePath, upath) |
||||
|
downloadPath := filepath.Join(filepath.Base(config.G.FilePath), r.URL.Path[1:]) |
||||
|
// 时间目录的情况
|
||||
|
fileInfo, err := os.Stat(realFilePath) |
||||
|
if err != nil { |
||||
|
http.Error(w, err.Error(), http.StatusInternalServerError) |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
data := struct { |
||||
|
Rundir string |
||||
|
IsDir bool |
||||
|
FileName string |
||||
|
DownloadPath string |
||||
|
// Files []os.DirEntry
|
||||
|
}{ |
||||
|
Rundir: config.G.FilePath, |
||||
|
DownloadPath: downloadPath, |
||||
|
} |
||||
|
|
||||
|
// list json
|
||||
|
var flist FilesListJson |
||||
|
|
||||
|
if fileInfo.IsDir() { |
||||
|
data.IsDir = true |
||||
|
// 遍历目录
|
||||
|
files, err := os.ReadDir(realFilePath) |
||||
|
if err != nil { |
||||
|
http.Error(w, err.Error(), http.StatusInternalServerError) |
||||
|
return |
||||
|
} |
||||
|
// data.Files = files
|
||||
|
|
||||
|
for _, v := range files { |
||||
|
flist.Flist = append(flist.Flist, FileJson{Fname: v.Name(), Dirflag: 1}) |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
//data.FileName = filepath.Base(realFilePath)
|
||||
|
flist.Flist = append(flist.Flist, FileJson{Fname: filepath.Base(realFilePath), Dirflag: 0}) |
||||
|
} |
||||
|
|
||||
|
// respone file list
|
||||
|
response := Response{ |
||||
|
Status: "success", |
||||
|
Scdir: upath, |
||||
|
Data: flist, |
||||
|
} |
||||
|
// 设置跨域响应头
|
||||
|
w.Header().Set("Access-Control-Allow-Origin", "*") |
||||
|
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS,PUT,DELETET") |
||||
|
// w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Accept,Accept-Length,Accept-Encoding,X-XSRF-TOKEN,X-XSRF-TOKEN")
|
||||
|
w.Header().Set("Access-Control-Allow-Headers", "*") |
||||
|
//
|
||||
|
w.Header().Set("Content-Type", "application/json") |
||||
|
|
||||
|
// 如果是OPTIONS请求,返回200 OK
|
||||
|
if r.Method == "OPTIONS" { |
||||
|
// fmt.Printf("options is now \n")
|
||||
|
// w.WriteHeader(http.StatusOK)
|
||||
|
return |
||||
|
} |
||||
|
|
||||
|
json.NewEncoder(w).Encode(response) |
||||
|
} |
||||
Loading…
Reference in new issue