ポイントは2回InputStreamを作成することです。
http://stackoverflow.com/questions/8351886/amazons3-putobject-with-inputstream-length-example
package awssample; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.sql.SQLException; import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.util.IOUtils; public class S3Write { private static String endpoint = "https://s3-ap-northeast-1.amazonaws.com"; public static void main(String[] args) throws SQLException { String s = "2011-01-01,9999,1,100,1.0,-1.0,0.5"; // 認証オブジェクトを作成 String accessKey = "xxxxxx"; String accessSecretKey = "xxxxxxxx"; AWSCredentials credentials = new BasicAWSCredentials(accessKey, accessSecretKey); // ConfigurationでTimeout時間を30秒に設定 ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setConnectionTimeout(30000); // AmazonS3Clientをインスタンス化 AmazonS3Client s3 = new AmazonS3Client(credentials, clientConfiguration); s3.setEndpoint(endpoint); try { InputStream is = new ByteArrayInputStream(s.getBytes("UTF-8")); byte[] contentBytes = IOUtils.toByteArray(is); Long contentLength = Long.valueOf(contentBytes.length); System.out.println("contentLength=" + contentLength + ",s=" + s); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(contentLength); // isではなく new ByteStreamInputStreamでもう一度さくせいしたものを渡す s3.putObject(new PutObjectRequest("bucketname", "path/to/file.txt", new ByteArrayInputStream(s.getBytes("UTF-8")), metadata)); } catch (Exception e) { e.printStackTrace(); } } }