Amazon s3で文字列をファイルとして追加するにはどうすればよいですか?何を検索しても、ファイルをs3にアップロードできることがわかりました。ファイルを作成せずにデータをアップロードする最良の方法は何ですか?
ファイルを作成せずにデータをアップロードする最良の方法は何ですか?
S3でファイルを作成せずに意図した場合、まあ、それを実際に行うことはできません。 Amazon S3では、データを保存するonly方法はファイルとして、またはより正確な用語を使用して、objects。オブジェクトには、 1バイト 0バイトから5テラバイトのデータで、バケットに格納されます。 Amazonの S3ホームページは基本的な事実を非常に明確にレイアウトしています 。 (AWSの他のデータ保存オプションについては、たとえば、約 SimpleDB を参照することをお勧めします。)
ローカルの一時ファイルを作成せずに意図した場合、答えは使用しているライブラリ/ツールによって異なります。 (RickMeashamが提案したように、詳細を追加してください!)たとえば、s3cmdツールでは、一時ファイルの作成をスキップできませんが、JetS3tではJavaライブラリが文字列を直接アップロードします 簡単でしょう :
// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
見栄えが良くありませんが、Amazons Javaクライアントを使用して、どうすればJetS3tが舞台裏で行うのかを説明します。
private boolean putArtistPage(AmazonS3 s3,String bucketName, String key, String webpage)
{
try
{
byte[] contentAsBytes = webpage.getBytes("UTF-8");
ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(contentAsBytes);
ObjectMetadata md = new ObjectMetadata();
md.setContentLength(contentAsBytes.length);
s3.putObject(new PutObjectRequest(bucketname, key, contentsAsStream, md));
return true;
}
catch(AmazonServiceException e)
{
log.log(Level.SEVERE, e.getMessage(), e);
return false;
}
catch(Exception ex)
{
log.log(Level.SEVERE, ex.getMessage(), ex);
return false;
}
}
バケット文字列、キー文字列、およびテキストコンテンツの文字列を受け入れる AmazonS3.putObjectメソッドのオーバーロード があります。スタックオーバーフローでの言及は見たことがなかったので、ここに配置します。 @Jonikの回答と似ていますが、追加の依存関係はありません。
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);
PHPでそれを行う簡単な方法があります、キーに新しいファイルの名前を指定して、オブジェクトの本体として文字列を送信するだけです-
$s3->putObject(array(
'Bucket' => [Bucket name],
'Key' => [path/to/file.ext],
'Body' => [Your string goes here],
'ContentType' => [specify mimetype if you want],
));
これにより、文字列で指定された内容を持つ、指定されたキーに従って新しいファイルが作成されます。
Javaを使用している場合は、チェックアウト https://ivan-site.com/2015/11/interact-with-s3-without-temp-files/
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import Java.io.*;
import Java.nio.charset.StandardCharsets;
class S3StreamJacksonTest {
private static final String S3_BUCKET_NAME = "bucket";
private static final String S3_KEY_NAME = "key";
private static final String CONTENT_TYPE = "application/json";
private static final AmazonS3 Amazon_S3 = new AmazonS3Client();
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TestObject TEST_OBJECT = new TestObject("test", 123, 456L);
public void testUploadWithStream() throws JsonProcessingException {
String fileContentString = OBJECT_MAPPER.writeValueAsString(TEST_OBJECT);
byte[] fileContentBytes = fileContentString.getBytes(StandardCharsets.UTF_8);
InputStream fileInputStream = new ByteArrayInputStream(fileContentBytes);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(CONTENT_TYPE);
metadata.setContentLength(fileContentBytes.length);
PutObjectRequest putObjectRequest = new PutObjectRequest(
S3_BUCKET_NAME, S3_KEY_NAME, fileInputStream, metadata);
Amazon_S3.putObject(putObjectRequest);
}
}
これは私にとってはうまくいきます:
public static PutObjectResult WriteString(String bucket, String key, String stringToWrite, AmazonS3Client s3Client) {
ObjectMetadata meta = new ObjectMetadata();
meta.setContentMD5(new String(com.amazonaws.util.Base64.encode(DigestUtils.md5(stringToWrite))));
meta.setContentLength(stringToWrite.length());
InputStream stream = new ByteArrayInputStream(stringToWrite.getBytes(StandardCharsets.UTF_8));
return s3Client.putObject(bucket, key, stream, meta);
}