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  }