package main import ( "fmt" "log" "os" "path/filepath" "time" "github.com/joho/godotenv" ) func resolveFileStorePath(fileStorePath string) { err := os.MkdirAll(fileStorePath, os.ModePerm) if err != nil { log.Fatal(err) } } type StoredFileNode struct { Name string `json:"name"` // full file name with extension Path string `json:"path"` // path to file Size int64 `json:"size"` // byte size of file Extension string `json:"extension"` // the file name extension MimeType string `json:"mime_type"` // mime type regarless of extension Permissions string `json:"permissions"` // UNIX permissions IsFolder bool `json:"is_folder"` // directory flag Modified time.Time `json:"modified_at"` // last modification date } func readFilesFromFileStorePath(fileStorePath string) { files, err := os.ReadDir(fileStorePath) if err != nil { log.Fatal(err) } shownNodes := []StoredFileNode{} for _, file := range files { fullPath := filepath.Join(fileStorePath, file.Name()) fileStat, err := os.Stat(fullPath) if err != nil { log.Fatal(err) } fmt.Println(fileStat.Size()) fileInfo, err := file.Info() // This returns an os.FileInfo if err != nil { continue } // generate new StoredFileNode newNode := StoredFileNode{ Name: file.Name(), Path: fileStorePath, Size: fileStat.Size(), Extension: "--", MimeType: "--", Permissions: "--", IsFolder: false, Modified: fileInfo.ModTime(), } if file.IsDir() { newNode.IsFolder = true } shownNodes = append(shownNodes, newNode) } fmt.Println(shownNodes) } func main() { err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } port := os.Getenv("PORT") fileStorePath := os.Getenv("STORAGE_PATH") resolveFileStorePath(fileStorePath) fmt.Printf("in the future I will listen on port: %s\n", port) fmt.Printf("Reading files from: %s\n", fileStorePath) readFilesFromFileStorePath(fileStorePath) }