go-file-serve/routes/api/files.go

69 lines
1.1 KiB
Go

package api
import (
"io/ioutil"
"strconv"
"git.trj.tw/golang/go-file-serve/module/config"
"git.trj.tw/golang/go-file-serve/module/context"
)
// GetFileList -
func GetFileList(c *context.Context) {
var err error
limit := -1
skip := 0
if str, ok := c.GetQuery("limit"); ok && len(str) > 0 {
limit, err = strconv.Atoi(str)
if err != nil {
limit = -1
}
if limit <= 0 {
limit = -1
}
}
if str, ok := c.GetQuery("skip"); ok && len(str) > 0 {
skip, err = strconv.Atoi(str)
if err != nil {
skip = 0
}
if skip < 0 {
skip = 0
}
}
conf := config.GetConf()
if conf == nil {
c.ServerError()
return
}
fileInfo, err := ioutil.ReadDir(conf.FilePath)
if err != nil {
c.ServerError()
return
}
totalItem := len(fileInfo)
if skip < totalItem {
if limit > 0 {
fileInfo = fileInfo[skip : skip+limit]
} else {
fileInfo = fileInfo[skip:]
}
} else {
fileInfo = nil
}
resArr := make([]string, 0, len(fileInfo))
for _, v := range fileInfo {
resArr = append(resArr, v.Name())
}
c.Success(map[string]interface{}{
"files": resArr,
"total": totalItem,
})
}