2017-11-28 16 views
0

私はシリアル化可能なオブジェクトをamazon s3のバケットに書きたいと思います。 S3ObjectInputStreamを使用することはできますが、S3ObjectOutputStreamというクラスは見つかりません。java用のSDKにOutputStreamを使ってamazon s3にオブジェクトを書き込む方法はありますか?

もちろん、シリアル化可能なオブジェクトをローカルディレクトリに書き込んでからs3にアップロードすることもできますが、Amazon s3にOutputStreamで直接書き込む方法はありますか?

答えて

0

どのようにPutObjectRequestを使用しますか?

0

私が使用してこの機能をパブリックPutObjectRequest(文字列bucketName、 文字列のキー、 のInputStream入力、 ObjectMetadataメタデータ)を可能にhttp://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/PutObjectRequest.html#PutObjectRequest-java.lang.String-java.lang.String-java.io.InputStream-com.amazonaws.services.s3.model.ObjectMetadata-

を見てみましょう:

public String upload(String name, InputStream is, String contentType) throws FileLoadException { 

    try { 

     log.debug("Loading file {} into S3 Bucket {}", name, bucketName); 
     AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withRegion(Regions.EU_WEST_1).build(); 

     ObjectMetadata objectMetadata = new ObjectMetadata(); 
     objectMetadata.setContentType(contentType); 
     objectMetadata.setCacheControl("public, max-age=31536000"); 

     String filename = String.format("%s/%s", s3Folder, name); 

     amazonS3.putObject(new PutObjectRequest(bucketName, filename, is, objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead)); 

     log.debug("Image {} upload into S3 Bucket {}", name, bucketName); 
     return s3BaseUrl + filename; 
    } catch (Exception e) { 
     //handle 
    } 
} 

を、私はこの依存関係を追加しました:

<dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk-s3</artifactId> 
    </dependency> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-bom</artifactId> 
      <version>1.11.194</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
関連する問題