github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/net/http/upload/up2ds/up2ds.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "log" 7 "net/http" 8 "os" 9 "path/filepath" 10 "strings" 11 12 "github.com/codegangsta/cli" 13 "github.com/pbberlin/tools/net/http/routes" 14 "github.com/pbberlin/tools/net/http/upload" 15 ) 16 17 var urlUp []string 18 19 func init() { 20 urlUp = []string{ 21 "http://" + routes.AppHostDev() + upload.UrlUploadReceive, 22 "https://" + routes.AppHostLive() + upload.UrlUploadReceive, 23 } 24 } 25 26 func main() { 27 28 app := cli.NewApp() 29 app.Name = "up2ds" 30 app.Usage = "Upload to datastore - local zip files are http posted to remote appengine handler." 31 app.Version = "0.1" 32 33 app.Flags = []cli.Flag{ 34 cli.StringFlag{ 35 Name: "file, f", 36 Value: "public.zip", 37 Usage: "filename to upload", 38 EnvVar: "ENV_VAR_UP2DS_FILENAME_1,ENV_VAR_UP2DS_FILENAME_2", 39 }, 40 cli.StringFlag{ 41 Name: "live, l", 42 Value: "", 43 Usage: "'live' to upload to live, default is test", 44 EnvVar: "ENV_VAR_UP2DS_UPLOAD_LIVE", 45 }, 46 cli.StringFlag{ 47 Name: "mount, m", 48 Value: "mnt02", 49 Usage: "the mount name for the dsfs", 50 }, 51 } 52 53 app.Action = func(c *cli.Context) { 54 55 args := c.Args() 56 if len(args) > 0 { 57 fmt.Printf(" %v args given:\n", len(args)) 58 for k, v := range args { 59 fmt.Printf("%4v %-v\n", k, v) 60 } 61 } else { 62 fmt.Printf(" no args given\n") 63 } 64 65 fn := c.String("file") 66 if fn == "" { 67 fmt.Printf(" cannot upload empty file\n") 68 return 69 } else { 70 fmt.Printf(" uploading... %v\n", fn) 71 } 72 73 url := urlUp[0] 74 dest := c.String("live") 75 if dest == "live" { 76 url = urlUp[1] 77 fmt.Printf(" uploading to live %v\n", fn) 78 } 79 80 mount := "mnt02" 81 if c.String("mount") != "" { 82 mount = c.String("mount") 83 } 84 fmt.Printf(" mount name %q\n", mount) 85 86 uploadFile(fn, mount, url) 87 88 } 89 90 app.Run(os.Args) 91 } 92 93 func uploadFile(filename, mountName, effUpUrl string) { 94 95 log.SetFlags(log.Lshortfile) 96 97 curdir, _ := os.Getwd() 98 filePath := filepath.Join(curdir, filename) 99 100 extraParams := map[string]string{ 101 "getparam1": "val1", 102 "mountname": mountName, 103 } 104 105 request, err := upload.CreateFilePostRequest(effUpUrl, "filefield", filePath, extraParams) 106 if err != nil { 107 log.Fatal(err) 108 } 109 110 client := &http.Client{} 111 fmt.Printf(" sending %v\n", filePath) 112 fmt.Printf(" ... to %v\n", effUpUrl) 113 resp, err := client.Do(request) 114 115 if err != nil { 116 log.Fatal(err) 117 } else { 118 bts, err := ioutil.ReadAll(resp.Body) 119 if err != nil { 120 log.Fatal(err) 121 } 122 defer resp.Body.Close() 123 for k, v := range resp.Header { 124 fmt.Println("\tHdr: ", k, v) 125 } 126 fmt.Printf(" status: %v\n", resp.StatusCode) 127 128 bod := string(bts) 129 bods := strings.Split(bod, "<span class='body'></span>") 130 if len(bods) == 3 { 131 bod = bods[1] 132 } 133 134 fmt.Printf(" body: %s\n", bod) 135 } 136 137 }