diff options
Diffstat (limited to 'cmd/swarm/upload.go')
-rw-r--r-- | cmd/swarm/upload.go | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/cmd/swarm/upload.go b/cmd/swarm/upload.go index 696b907d2..46f10c4be 100644 --- a/cmd/swarm/upload.go +++ b/cmd/swarm/upload.go @@ -20,6 +20,8 @@ package main import ( "encoding/json" "fmt" + "io" + "io/ioutil" "os" "os/user" "path" @@ -31,21 +33,42 @@ import ( ) func upload(ctx *cli.Context) { + args := ctx.Args() var ( bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") recursive = ctx.GlobalBool(SwarmRecursiveUploadFlag.Name) wantManifest = ctx.GlobalBoolT(SwarmWantManifestFlag.Name) defaultPath = ctx.GlobalString(SwarmUploadDefaultPath.Name) + fromStdin = ctx.GlobalBool(SwarmUpFromStdinFlag.Name) + mimeType = ctx.GlobalString(SwarmUploadMimeType.Name) ) + + var client = swarm.NewClient(bzzapi) + var entry swarm.ManifestEntry + var file string + if len(args) != 1 { - utils.Fatalf("Need filename as the first and only argument") + if fromStdin { + tmp, err := ioutil.TempFile("", "swarm-stdin") + if err != nil { + utils.Fatalf("error create tempfile: %s", err) + } + defer os.Remove(tmp.Name()) + n, err := io.Copy(tmp, os.Stdin) + if err != nil { + utils.Fatalf("error copying stdin to tempfile: %s", err) + } else if n == 0 { + utils.Fatalf("error reading from stdin: zero length") + } + file = tmp.Name() + } else { + utils.Fatalf("Need filename as the first and only argument") + } + } else { + file = args[0] } - var ( - file = args[0] - client = swarm.NewClient(bzzapi) - ) fi, err := os.Stat(expandPath(file)) if err != nil { utils.Fatalf("Failed to stat file: %v", err) @@ -64,7 +87,7 @@ func upload(ctx *cli.Context) { fmt.Println(mhash) return } - entry, err := client.UploadFile(file, fi) + entry, err = client.UploadFile(file, fi, mimeType) if err != nil { utils.Fatalf("Upload failed: %v", err) } |