2

Go (lang) で goamz/s3 パッケージを使用して、ファイル バイトを S3 AWS にアップロードしようとしています。

私のコードは次のとおりです。

var (
    awsAuth aws.Auth
    region aws.Region
    connection s3.S3
    bucket *s3.Bucket
)
func init() {

    // Set up the AWS S3 Connection config.
    awsAuth = aws.Auth{
        AccessKey: os.Getenv("ACCESS_KEY"), // change this to yours
        SecretKey: os.Getenv("SECRET_KEY"),
    }
    fmt.Println("AWS: ", awsAuth)
    region := aws.EUWest    
    connection := s3.New(awsAuth, region)

    bucket = connection.Bucket(os.Getenv("S3_BUCKET")) // change this your bucket name
}
func uploadToS3(filename string, byteArray *[]byte) error {

    var err error
    //should check if file already uploaded, encrypted by this password
    fmt.Printf("[uploadToS3] starting upload of %s\n", filename)

    err = bucket.Put(filename, *byteArray, "text/plain; charset=utf-8", s3.PublicRead)
    if err != nil {
        fmt.Printf("[uploadToS3] error uploading: %s\n", err)
        return err
    } else {
        fmt.Printf("[uploadToS3] done uploading %s\n", filename)    
        return nil
    }

    return nil // redundancy
}

エラーが発生します

[uploadToS3] error uploading: Put /filename: unsupported protocol scheme ""

ここから読む:ec2セキュリティグループの作成中にサポートされていないプロトコルスキームが原因であると考えられますが、ご覧のとおり、init()関数で設定しているため、他に何ができるかわかりません

どんな考えでも大歓迎です

4

1 に答える 1

2

同じ問題を抱えている可能性のある人へ。バケット名が設定されていない場合に発生するエラーです。ばかげているようですが、これを docker 内で実行していて、バケット名を保持する環境変数が何であるかを docker に伝えるのを忘れていました。したがってecho $S3_BUCKET、端末で行ったとき、バケット名を取得したので、すべてが良いと思いました. ただし、docker コンテナー内ではテストしませんでした。私をだます。

于 2017-01-03T11:29:06.347 に答える