diff --git a/cmd/minio-encode/main.go b/cmd/minio-encode/main.go index 613ebb300..5c8001a57 100644 --- a/cmd/minio-encode/main.go +++ b/cmd/minio-encode/main.go @@ -14,17 +14,58 @@ func main() { app := cli.NewApp() app.Name = "minio-encode" app.Usage = "erasure encode a byte stream" + app.Flags = []cli.Flag{ + cli.StringFlag{ + Name: "input,i", + Value: "", + Usage: "Input file", + }, + cli.StringFlag{ + Name: "output,o", + Value: "", + Usage: "Output file", + }, + } app.Action = func(c *cli.Context) { - erasureParameters, _ := erasure.ValidateParams(10, 5, 8, erasure.CAUCHY) - - encoder := erasure.NewEncoder(erasureParameters) - input, err := ioutil.ReadAll(os.Stdin) - if err != nil { - log.Fatal("Error reading stdin") + // check if minio-encode called without parameters + if len(c.Args()) == 1 { + cli.ShowAppHelp(c) } + + // get input path + if c.String("input") == "" { + log.Fatal("No input specified") + } + inputFilePath := c.String("input") + + // get output path + outputFilePath := inputFilePath + if c.String("output") != "" { + outputFilePath = c.String("output") + } + + // get file + inputFile, err := os.Open(inputFilePath) + if err != nil { + log.Fatal(err) + } + + // read file + input, err := ioutil.ReadAll(inputFile) + if err != nil { + log.Fatal(err) + } + + // set up encoder + erasureParameters, _ := erasure.ValidateParams(10, 5, 8, erasure.CAUCHY) + encoder := erasure.NewEncoder(erasureParameters) + + // encode data encodedData, _ := encoder.Encode(input) + + // write encoded data out for key, data := range encodedData { - ioutil.WriteFile("output."+strconv.Itoa(key), data, 0600) + ioutil.WriteFile(outputFilePath+"."+strconv.Itoa(key), data, 0600) } } app.Run(os.Args)