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?
Antwort
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);
Ein Objekt in S3 kann auch eine Größe von null Byte haben, nicht das kleinste, wie Sie vorschlagen. :) – chilts
Wie Sie dies mit Amazons API tun, dort hat Version von S3Object keinen solchen Konstruktor –
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;
}
}
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);
}
}
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);
}
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);
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.
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.
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
Nach [docs] (https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html). So wird es gemacht. –
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
- 1. Wie suche ich eine Zeichenkette in Amazon S3 Dateien?
- 2. Wie konvertiere ich eine Zeichenkette in eine Zeichenkette wchar_t?
- 3. Wie schreibe ich eine Unicode-Zeichenkette in eine Textdatei in R Windows?
- 4. AmazonS3Client.listObjects() Problem mit großen s3bucket
- 5. Wie schreibe ich einen Überladungsoperator >> Funktion der Zeichenkette?
- 6. Wie entkomme ich eine Zeichenkette in Java?
- 7. Wie schreibe ich eine "Registerkarte" in Python?
- 8. Wie schreibe ich in eine versteckte Datei?
- 9. Wie schreibe ich eine Shell in Python
- 10. Wie schreibe ich eine Funktion in Python
- 11. Wie schreibe ich eine Anweisung in JSON?
- 12. Wie schreibe ich Frames in eine Videodatei?
- 13. Wie schreibe ich Objekte in eine Datei
- 14. Wie bekomme ich eine nullterminierte Zeichenkette von einer C# Zeichenkette?
- 15. Pascal: schreibe eine sehr lange Zeichenkette ohne Referenzzählertypen (zB: anisstring)
- 16. Wie definiere ich eine vorzeichenlose char * Zeichenkette?
- 17. Wie übergebe ich eine Zeichenkette an setContentView()?
- 18. Wie schreibe ich eine Datenbank in eine Textdatei in Android
- 19. Wie schreibe ich eine Variable in eine Datei in ant?
- 20. Q: Wie importiere ich eine Konstante in eine Zeichenkette?
- 21. Wie zeichne ich eine Zeichenkette ohne Padding
- 22. Wie schreibe ich in eine Varchar (Max) Spalte mit ODBC
- 23. Wie schreibe ich MongoDB Abfrageanweisung für eine bestimmte Anforderung?
- 24. Wie verschiebe ich eine Amazon-Mikroinstanz in eine kleine Instanz?
- 25. Wie schreibe ich eine Doctrine2 löschen Abfrage
- 26. Wie schreibe ich eine einzelne Django-Anwendung?
- 27. Wie schreibe ich eine std :: codecvt Facette?
- 28. Wie schreibe ich eine xquery mit Sequenzelementen?
- 29. Wie schreibe ich eine AREL-Anweisung in eine selbstreferenzierende Tabelle?
- 30. F # Wie schreibe ich eine leere Anweisung
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