2010-03-23 7 views
15

amazon s3에서 문자열을 파일로 추가하려면 어떻게해야합니까? 검색된 모든 것을 통해 s3에 파일을 업로드 할 수 있다는 것을 알아야합니다. 파일을 만들지 않고 데이터를 업로드하는 가장 좋은 방법은 무엇입니까?Amazon S3 버킷에 문자열을 쓰는 방법은 무엇입니까?

+1

질문에 자세한 내용이 있으면 더 많은 도움을 얻을 것을 제안합니다. 어떤 언어로 쓰고 있는지, 어떤 라이브러리가 있으면 S3와 상호 작용하는지 등. – RickMeasham

답변

3

파일을 만들지 않고 데이터를 업로드하는 가장 좋은 방법은 무엇입니까?

S3에 파일을 만들지 않은 경우에는 실제로 그렇게 할 수 없습니다. Amazon S3에서 데이터를 저장하는 방법은 파일 또는보다 정확한 용어를 사용하여 개체입니다. 객체에는 1 바이트 0 바이트에서 5 테라 바이트의 데이터가 포함될 수 있으며 버킷에 저장됩니다. 아마존의 S3 homepage lays out the basic facts quite clearly. (AWS의 다른 데이터 저장 옵션의 경우 예를 들어 SimpleDB을 읽을 수 있습니다.

로컬 임시 파일을 만들지 않은 경우 사용하는 응답은 사용중인 라이브러리/도구에 따라 다릅니다. (RickMeasham 제안으로, 더 세부 사항을 추가하십시오!)가 s3cmd 도구로, JetS3t의 자바 라이브러리와 직접 would be easy 문자열을 업로드하는 동안 예를 들어, 당신은 임시 파일을 생성 건너 뛸 수 없습니다

// (First init s3Service and testBucket) 
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!"); 
s3Service.putObject(testBucket, stringObject); 
+1

S3에있는 객체의 크기는 0 바이트 일 수 있으며 사용자가 제안한 최소 크기는 아닙니다. :) – chilts

+13

Amazons API를 사용하여 어떻게하는지, S3Object 버전에는 그러한 생성자가 없습니다 –

10

하지 않습니다 멋지게 보일 지 모르지만, 아마존의 자바 클라이언트를 사용하여 어떻게 할 수 있을까요, 어쨌든 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; 
     } 
    } 
3

, 이것은 나를 위해 작동 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); 
    } 
} 
0

체크 아웃 :

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); 
} 
5

양동이 문자열을 받아들이는 overload for the AmazonS3.putObject method가, 키 문자열 텍스트 내용의 문자열. 스택 오버플로에 대한 언급을 보지 못했기 때문에 이것을 여기에두고 있습니다. 그것은 @ Jonik의 대답과 유사 할 것입니다. 그러나 추가적인 의존성은 없습니다. PHP와 함께 할 수있는 간단한 방법이있다

AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build(); 
s3client.putObject(bucket, key, contents); 
2

, 단순히 키에 새 파일의 이름을 지정하여 객체의 본문으로 문자열을 보내 -

$s3->putObject(array(
     'Bucket'  => [Bucket name], 
     'Key'   => [path/to/file.ext], 
     'Body'   => [Your string goes here], 
     'ContentType' => [specify mimetype if you want], 
    )); 

이 생성됩니다 지정된 키에 따른 새로운 파일. 문자열에 지정된 내용을 갖습니다.

1

나는 아무도 여기에 맞는 대답이 없다는 사실에 놀랐습니다. Java API에 대해서는 여기 official documentation을 참조하십시오.

s3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, fileName, rawString)); 

더 프로그래밍 언어의 here을 확인하시기 바랍니다.

+0

[redirectLocation] (https : //docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/PutObjectRequest.html # PutObjectRequest-java.lang.String-java.lang.String-java.lang.String-)? – Valentin

+0

[docs] (https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html)에 따르면. 그게 다 끝났어. –

+0

이 문서는 파일을 업로드하는 것에 관한 내용이며, 내용을 String으로 업로드하는 것에 관한 내용은 없습니다. 가장 간단하고 정확한 해결책은 여기에 있습니다 - https://stackoverflow.com/a/42510981/7374267 – Valentin

관련 문제