2017-03-08 31 views
0

私が現在取り組んでいるアプリケーションは、S3バケットにログメッセージを書き込むためにAmazon S3 Stream WrapperをPHPで使用しており、Golangに移植する必要があります。 Goにこれに同値がありますか? PutObjectメソッドはすべての内容を上書きし、追加するだけです。 PHPでは、既存のバケットに文字列を追加するのにfopen()fwrite()を使用しています。ゴランのS3バケットへの書き込み/追加

os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) 

私はファイルが存在しないというエラーが表示されます。私はs3://https://の両方をログファイルにリンクしてみました。

は、ここでPHPのためのアマゾンの例です:

$stream = fopen('s3://bucket/key', 'w'); 
fwrite($stream, 'Hello!'); 
fclose($stream); 
+2

S3追記をサポートしていません。チャンクの束を入れて1つの大きなファイルに(シーンの裏に)追加することで、チャンク制限あたり5GBを払うS3Managerでさえ、その能力を与えません。最後のバイトが送信され、ファイルハンドルが閉じられるまで、ファイルは基本的に実際には全く存在しない場合があります。 – Rob

+0

公式のawsのドキュメントをチェックしましたか? https://docs.aws.amazon.com/sdk-for-go/api/より具体的にはS3のドキュメント https://docs.aws.amazon.com/sdk-for-go/api/service/ s3/ – reticentroot

+0

@Rob何とかPHPでストリーミングをやっているので、混乱しています... – Morgan

答えて

1

@Robが述べたように、S3は、追加操作https://forums.aws.amazon.com/message.jspa?messageID=540395をサポートしていません。

唯一の方法は、ダウンロードオブジェクトで、aws-sdkまたはminio(https://github.com/minio/minio)を使用して新しいオブジェクトをアップロードすることです。私は、PHPのラッパーは、ボンネットの下で同じことをすると思います。 minioと

サンプル:

s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESS-KEY-HERE", "YOUR-SECRET-KEY-HERE", true) 
if err != nil { 
    log.Fatalln(err) 
} 

reader, err := s3Client.GetObject("my-bucketname", "my-objectname") 
if err != nil { 
    log.Fatalln(err) 
} 
defer reader.Close() 

// Change your data 

n, err := s3Client.PutObject("my-bucketname", "my-objectname", reader, "application/octet-stream") 
if err != nil { 
    log.Fatalln(err) 
} 
+0

私はまだPHPへの類義語を見つけていないので、基本的に@BayRinatがGetObjectInputを使ってファイルを提案してダウンロードし、内容を解析して新しいログメッセージを追加し、バイトに変換してからPutObject S3上でそれを置き換える。 – Morgan

関連する問題