User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
go:microstore [2019-11-25 10:35]
ziggi [Simple HTTP file server]
go:microstore [2019-11-26 15:20] (current)
ziggi
Line 33: Line 33:
 #EOF #EOF
 </​code>​ </​code>​
- 
  
 ===config.go=== ===config.go===
Line 45: Line 44:
     "​github.com/​spf13/​viper"​     "​github.com/​spf13/​viper"​
 ) )
- 
  
 type AppConfig struct { type AppConfig struct {
Line 89: Line 87:
  
     return config     return config
-} 
- 
-</​code>​ 
- 
-===daemon.go=== 
- 
-<code go daemon.go>​ 
- 
-package main 
- 
-import ( 
-    "​log"​ 
-    "​path"​ 
-    "​github.com/​sevlyar/​go-daemon"​ 
-) 
- 
-func daemonize() { 
- 
-    context := &​daemon.Context{ 
-        PidFileName:​ path.Join(appConfig.runDir,​ "​pid"​),​ 
-        PidFilePerm:​ 0644, 
-        LogFileName:​ path.Join(appConfig.logDir,​ "​error"​),​ 
-        LogFilePerm:​ 0640, 
-        WorkDir: "​./",​ 
-        Umask: 027, 
-        Args: []string{""​},​ 
-    } 
- 
-    child, err := context.Reborn() 
-    if err != nil { 
-        log.Fatal("​unable to run: ", err) 
-    } 
-    if child != nil { 
-        return 
-    } 
- 
-    defer context.Release() 
-    log.Println("​daemon started"​) 
 } }
  
Line 362: Line 322:
  
 <code go s4cli.go>​ <code go s4cli.go>​
-/* 
- * Copyright 2019 Oleg Borodin ​ <​borodin@unix7.org>​ 
- */ 
  
 package main package main
Line 382: Line 339:
     "​errors"​     "​errors"​
     "​mime/​multipart"​     "​mime/​multipart"​
-    "github.com/​pborman/​getopt/​v2"+    "flag"
 ) )
  
Line 457: Line 414:
     }     }
     return nil     return nil
 +}
 +
 +func printHeader(header http.Header) {
 +    for key, val := range header {
 +        fmt.Printf("​%s:​ %s\n", key, strings.Join(val,​ " "))
 +    }
 } }
  
 func download(baseUrl string, name string) error { func download(baseUrl string, name string) error {
 +
     url, err := urlAppend(baseUrl,​ fmt.Sprintf("/​download/​%s",​ name))     url, err := urlAppend(baseUrl,​ fmt.Sprintf("/​download/​%s",​ name))
     if err != nil {     if err != nil {
Line 479: Line 443:
     }     }
     defer out.Close()     defer out.Close()
-    _, err = io.Copy(out,​ resp.Body)+    ​//_, err = io.Copy(out,​ resp.Body
 +    fmt.Println(resp.Status) 
 + 
 +    printHeader(resp.Header) 
 + 
 +    buf := make([]byte, ​ 128 * 1024) 
 +    _, err = io.CopyBuffer(out,​ resp.Body, buf)
     return err     return err
 } }
Line 517: Line 487:
     }     }
     fmt.Println(resp.Status)     fmt.Println(resp.Status)
 +    printHeader(resp.Header)
     fmt.Println(string(resp_body))     fmt.Println(string(resp_body))
  
Line 523: Line 494:
  
 func main() { func main() {
-    optHelp := getopt.BoolLong("​help",​ '​h',​ "help usage"​) 
-    optIndex := getopt.BoolLong("​list",​ '​l',​ "list files"​) 
-    optDownload := getopt.BoolLong("​down",​ '​d',​ "​download file") 
-    optFileName := getopt.StringLong("​file",​ '​f',​ "",​ "file name") 
-    optUrl := getopt.StringLong("​node",​ '​e',​ "​http://​foo:​bar@localhost:​8089",​ "​server node") 
-    optUpload := getopt.BoolLong("​upload",​ '​u',​ "​download file") 
  
-    ​getopt.Parse()+    ​optNode := flag.String("​node",​ "​http://​foo:​bar@localhost:​8089",​ "​node"​)
  
-    ​if *optHelp ​+    ​exeName := filepath.Base(os.Args[0]) 
-        ​getopt.Usage()+    flag.Usage = func() ​
 +        ​fmt.Printf("​usage:​ %s [global option] command [command option]\n",​ exeName) 
 +        fmt.Println(""​) 
 +        fmt.Println("​commands:​ list, upload, download"​) 
 +        fmt.Println(""​) 
 +        fmt.Println("​global option:"​) 
 +        fmt.Println(""​) 
 +        flag.PrintDefaults()
         os.Exit(0)         os.Exit(0)
     }     }
  
 +    flag.Parse()
  
     apiPath := "/​store/​api/​v1/"​     apiPath := "/​store/​api/​v1/"​
-    apiUrl, err := urlAppend(*optUrl, apiPath)+    apiUrl, err := urlAppend(*optNode, apiPath)
  
-    ​if *optIndex { +    ​localArgs :flag.Args() 
-       ​err ​index(apiUrl+    ​var command string 
-    ​} else if *optDownload { + 
-        if len(*optFileName0 { +    if len(localArgs== 0 { 
-            ​*optFileName,​ err = expandPath(*optFileName+        ​flag.Usage() 
-            if err !nil { +    } 
-                fmt.Printf("error: %s\n", err+ 
-                os.Exit(1) +    command ​localArgs[0] 
-            } +    ​localArgs = localArgs[1:​] 
-            err = download(apiUrlfilepath.Base(*optFileName)+ 
-        ​} else { +    if strings.HasPrefix(command, ​"li"​) ​{ 
-            getopt.Usage() +        //​localCommands := flag.NewFlagSet("​index"​flag.ExitOnError
-            ​os.Exit(1) +        ​//​localCommands.Parse(localArgs
-        } + 
-    } else if *optUpload { +        err = index(apiUrl
-        if len(*optFileName> 0 +    } else if strings.HasPrefix(command, "​up"​) { 
-            ​*optFileName,​ err expandPath(*optFileName+        ​localCommands :flag.NewFlagSet("​upload",​ flag.ExitOnError
-            if err !nil { +        ​optFileName :localCommands.String("file", ​"",​ "file for upload"​
-                fmt.Printf("error: %s\n", ​err+        ​localCommands.Parse(localArgs
-                os.Exit(1+ 
-            } +        err = upload(apiUrl,​ *optFileName) 
-            err = upload(apiUrl,​ *optFileName) +    } else if strings.HasPrefix(command,​ "​down"​) ​
-        } else { +        ​localCommands := flag.NewFlagSet("​download",​ flag.ExitOnError
-            ​getopt.Usage() +        ​optFileName := localCommands.String("​file",​ "",​ "file for download"​
-            os.Exit(1+        ​localCommands.Parse(localArgs) 
-        ​+ 
-    } else { +        ​err = download(apiUrl,​ filepath.Base(*optFileName))
-        getopt.Usage() +
-        ​os.Exit(0)+
     }     }
  
Line 579: Line 550:
  
 </​code>​ </​code>​
 +
 +
  
 ====Result==== ====Result====
Line 643: Line 616:
  
 ---- ----
- 
-