2016-10-25 26 views
0

存在し、次のいない私のコードです:Golang AWS S3 NoSuchKey:指定されたキーは、私はS3からオブジェクトをダウンロードしようとしている

func listFile(bucket, prefix string) error { 
    svc := s3.New(sess) 
    params := &s3.ListObjectsInput{ 
     Bucket: aws.String(bucket), // Required 
     Prefix: aws.String(prefix), 
    } 
    return svc.ListObjectsPages(params, func(p *s3.ListObjectsOutput, lastPage bool) bool { 
     for _, o := range p.Contents { 
      //log.Println(*o.Key) 
      log.Println(*o.Key) 
      download(bucket, *o.Key) 
      return true 
     } 
     return lastPage 
    }) 
} 

func download(bucket, key string) { 
    logDir := conf.Cfg.Section("share").Key("LOG_DIR").MustString(".") 
    tmpLogPath := filepath.Join(logDir, bucket, key) 
    s3Svc := s3.New(sess) 
    downloader := s3manager.NewDownloaderWithClient(s3Svc, func(d *s3manager.Downloader) { 
     d.PartSize = 2 * 1024 * 1024 // 2MB per part 
    }) 
    f, err := os.OpenFile(tmpLogPath, os.O_CREATE|os.O_WRONLY, 0644) 
    if _, err = downloader.Download(f, &s3.GetObjectInput{ 
     Bucket: aws.String(bucket), 
     Key: aws.String(key), 
    }); err != nil { 
     log.Fatal(err) 
    } 
    f.Close() 
} 

func main() { 
    bucket := "mybucket" 
    key := "myprefix" 
    listFile(bucket, key) 
} 

私は機能listFile()内のオブジェクトのリストを取得することができますが、 404をダウンロードしたときに返された理由は?

答えて

0

最近のバージョンのライブラリでも同じ問題がありました。場合によっては、オブジェクトキーの先頭に "./"が付けられ、SDKがデフォルトで削除してダウンロードが失敗します。

てみてください、あなたのaws.Configにこれを追加すると、それは場合に役立ちます参照してください。

config := aws.Config{ 
    ... 
    DisableRestProtocolURICleaning: aws.Bool(true), 
} 

を私はissueを提出しました。

関連する問題