func (cp *cpOpts) Execute(args []string) (err error) { k, err := getAWSKeys() if err != nil { return } conf := new(s3gof3r.Config) *conf = *s3gof3r.DefaultConfig s3 := s3gof3r.New(cp.EndPoint, k) conf.Concurrency = cp.Concurrency if cp.NoSSL { conf.Scheme = "http" } conf.PartSize = cp.PartSize conf.Md5Check = !cp.NoMd5 s3gof3r.SetLogger(os.Stderr, "", log.LstdFlags, cp.Debug) src, err := func(src string) (io.ReadCloser, error) { u, err := url.Parse(src) if err != nil { return nil, fmt.Errorf("parse error: %s", err) } if u.Host == "" { return os.Open(u.Path) } r, _, err := s3.Bucket(u.Host).GetReader(u.Path, conf) return r, err }(cp.Source) if err != nil { return } defer checkClose(src, err) dst, err := func(dst string) (io.WriteCloser, error) { u, err := url.Parse(dst) if err != nil { return nil, fmt.Errorf("parse error: %s", err) } if u.Host == "" { return os.Create(u.Path) } return s3.Bucket(u.Host).PutWriter(u.Path, ACL(cp.Header, cp.ACL), conf) }(cp.Dest) if err != nil { return } defer checkClose(dst, err) _, err = io.Copy(dst, src) return }
func (get *getOpts) Execute(args []string) (err error) { conf := new(s3gof3r.Config) *conf = *s3gof3r.DefaultConfig k, err := getAWSKeys() if err != nil { return } s3 := s3gof3r.New(get.EndPoint, k) b := s3.Bucket(get.Bucket) conf.Concurrency = get.Concurrency if get.NoSSL { conf.Scheme = "http" } conf.PartSize = get.PartSize conf.Md5Check = !get.NoMd5 s3gof3r.SetLogger(os.Stderr, "", log.LstdFlags, get.Debug) if get.VersionID != "" { get.Key = fmt.Sprintf("%s?versionId=%s", get.Key, get.VersionID) } w, err := os.Create(get.Path) if err != nil { if get.Path == "" { w = os.Stdout } else { return } } defer checkClose(w, err) r, header, err := b.GetReader(get.Key, conf) if err != nil { return } defer checkClose(r, err) if _, err = io.Copy(w, r); err != nil { return } if get.Debug { log.Println("Headers: ", header) } return }
func (put *putOpts) Execute(args []string) (err error) { conf := new(s3gof3r.Config) *conf = *s3gof3r.DefaultConfig k, err := getAWSKeys() if err != nil { return } s3 := s3gof3r.New(put.EndPoint, k) b := s3.Bucket(put.Bucket) conf.Concurrency = put.Concurrency if put.NoSSL { conf.Scheme = "http" } conf.PartSize = put.PartSize conf.Md5Check = !put.NoMd5 s3gof3r.SetLogger(os.Stderr, "", log.LstdFlags, put.Debug) if put.Header == nil { put.Header = make(http.Header) } r, err := os.Open(put.Path) if err != nil { if put.Path == "" { r = os.Stdin } else { return } } defer checkClose(r, err) w, err := b.PutWriter(put.Key, ACL(put.Header, put.ACL), conf) if err != nil { return } defer checkClose(w, err) if _, err = io.Copy(w, r); err != nil { return } return }