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 } 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 } if _, err = io.Copy(dst, src); err != nil { return } if err = src.Close(); err != nil { return } return dst.Close() }
func (s *S3) GetS3Config() (*s3gof3r.Config, *s3gof3r.Keys) { conf := new(s3gof3r.Config) *conf = *s3gof3r.DefaultConfig keys := new(s3gof3r.Keys) keys.AccessKey = s.config.S3Config.Key keys.SecretKey = s.config.S3Config.Secret conf.Concurrency = 10 return conf, keys }
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 w.Close() r, header, err := b.GetReader(get.Key, conf) if err != nil { return } if _, err = io.Copy(w, r); err != nil { return } if err = r.Close(); err != nil { return } if get.Debug { log.Println("Headers: ", header) } return }
func (get *Get) 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) if get.Concurrency > 0 { conf.Concurrency = get.Concurrency } conf.PartSize = get.PartSize conf.Md5Check = !get.CheckDisable get.Key = url.QueryEscape(get.Key) if get.VersionId != "" { get.Key = fmt.Sprintf("%s?versionId=%s", get.Key, get.VersionId) } log.Println("GET: ", get) w, err := os.Create(get.Path) if err != nil { if get.Path == "" { w = os.Stdout } else { return } } defer w.Close() r, header, err := b.GetReader(get.Key, conf) if err != nil { return } if _, err = io.Copy(w, r); err != nil { return } if err = r.Close(); err != nil { return } log.Println("Headers: ", header) if get.Debug { debug() } return }
func (put *Put) 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) if put.Concurrency > 0 { conf.Concurrency = put.Concurrency } conf.PartSize = put.PartSize conf.Md5Check = !put.CheckDisable log.Println(put) 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 r.Close() w, err := b.PutWriter(put.Key, put.Header, conf) if err != nil { return } if _, err = io.Copy(w, r); err != nil { return } if err = w.Close(); err != nil { return } if put.Debug { debug() } 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 r.Close() w, err := b.PutWriter(put.Key, put.Header, conf) if err != nil { return } if _, err = io.Copy(w, r); err != nil { return } if err = w.Close(); err != nil { return } return }
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 conf.NTry = cp.NTry s3gof3r.SetLogger(os.Stderr, "", log.LstdFlags, cp.Debug) src, err := func(src string) (io.ReadCloser, error) { if !strings.HasPrefix(strings.ToLower(src), "s3") { return os.Open(src) } u, err := url.ParseRequestURI(src) if err != nil { return nil, fmt.Errorf("parse error: %s", err) } 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) { if !strings.HasPrefix(strings.ToLower(dst), "s3") { return os.Create(dst) } u, err := url.ParseRequestURI(dst) if err != nil { return nil, fmt.Errorf("parse error: %s", err) } 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 (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) // parse positional cp args if len(args) != 2 { return fmt.Errorf("cp: source and destination arguments required") } var urls [2]*url.URL for i, a := range args { urls[i], err = url.Parse(a) if err != nil { return fmt.Errorf("parse error: %s", err) } if urls[i].Host != "" && urls[i].Scheme != "s3" { return fmt.Errorf("parse error: %s", urls[i].String()) } } src, err := func(src *url.URL) (io.ReadCloser, error) { if src.Host == "" { return os.Open(src.Path) } r, _, err := s3.Bucket(src.Host).GetReader(src.Path, conf) return r, err }(urls[0]) if err != nil { return } dst, err := func(dst *url.URL) (io.WriteCloser, error) { if dst.Host == "" { return os.Create(dst.Path) } return s3.Bucket(dst.Host).PutWriter(dst.Path, cp.Header, conf) }(urls[1]) if err != nil { return } if _, err = io.Copy(dst, src); err != nil { return } if err = src.Close(); err != nil { return } if err = dst.Close(); err != nil { return } return }