2010-03-23 5 views
15

Wie kann ich eine Zeichenfolge als Datei auf Amazon S3 hinzufügen? Von dem, was ich suchte, erfuhr ich, dass wir eine Datei auf s3 hochladen können. Was ist der beste Weg, um Daten hochzuladen, ohne eine Datei zu erstellen?Wie schreibe ich eine Zeichenkette in Amazon S3-Bucket?

+1

Ich würde vorschlagen, dass Sie mehr Hilfe bekommen, wenn Ihre Frage detaillierter ist. Zum Beispiel, in welcher Sprache Sie schreiben und welche Bibliothek Sie für die Interaktion mit S3 verwenden. – RickMeasham

Antwort

3

Was ist der beste Weg zum Hochladen von Daten ohne Datei zu erstellen?

Wenn Sie gemeint haben, ohne eine Datei auf S3 zu erstellen, können Sie das nicht wirklich tun. Bei Amazon S3 ist die nur Weg, Daten zu speichern, als Dateien oder genauere Terminologie verwenden Objekte. Ein Objekt kann von 1 Byte Nullbytes bis 5 Terabyte Daten enthalten und wird in einem Bucket gespeichert. Amazonas S3 homepage lays out the basic facts quite clearly. (Für andere Datenspeicheroptionen in AWS möchten Sie vielleicht z. B. über SimpleDB lesen.)

Wenn Sie gemeint haben, ohne eine lokale temporäre Datei zu erstellen, hängt die Antwort davon ab, welche Bibliothek/welches Werkzeug Sie verwenden. (Wie RickMeasham vorgeschlagen, fügen Sie bitte weitere Details!) Mit dem s3cmd Werkzeug, zum Beispiel, können Sie überspringen nicht temporäre Datei erstellen, während sie mit der Jets3t Java-Bibliothek ein String direkt would be easy Hochladen:

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

Ein Objekt in S3 kann auch eine Größe von null Byte haben, nicht das kleinste, wie Sie vorschlagen. :) – chilts

+13

Wie Sie dies mit Amazons API tun, dort hat Version von S3Object keinen solchen Konstruktor –

10

Does nicht sieht so gut aus, aber hier ist, wie Sie es mit Amazons Java Client machen können, wahrscheinlich, was JetS3t sowieso hinter den Kulissen macht.

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

Wenn Sie Java verwenden sind Besuche 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

Dies funktioniert für mich:

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

Es gibt eine overload for the AmazonS3.putObject method, die die Eimer Zeichenfolge, eine Schlüsselzeichenfolge akzeptiert, und eine Zeichenfolge mit Textinhalt. Ich habe es nicht auf dem Stack-Overflow gesehen, also setze ich das hier hin. Es wird ähnlich sein @ Joniks Antwort, aber ohne die zusätzliche Abhängigkeit.

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

Es gibt eine einfache Möglichkeit ist es mit PHP zu tun, einfach die Zeichenfolge als der Körper des Objekts zu senden, den Namen der neuen Datei im Schlüssel spezifiziert -

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

Dies erstellen eine neue Datei gemäß dem angegebenen Schlüssel, die einen Inhalt wie in der Zeichenfolge angegeben hat.

1

Ich bin überrascht, dass hier niemand die richtige Antwort hat. Siehe official documentation hier für Java API.

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

Für weitere Programmiersprachen, bitte here überprüfen.

+0

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

+0

Nach [docs] (https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html). So wird es gemacht. –

+0

In diesem Dokument geht es um das Hochladen von Dateien. Es gibt keine Informationen zum Hochladen von Inhalten als String. Die einfachste und korrekte Lösung ist hier - https://stackoverflow.com/a/42510981/7374267 – Valentin

Verwandte Themen