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