amazon-s3 - simple - storage s3 aws
¿Cómo escribir una cadena en Amazon S3 bucket? (6)
¿Cuál es la mejor manera de cargar datos sin crear un archivo?
Si quisiste decir sin crear un archivo en S3, bueno, realmente no puedes hacer eso. En Amazon S3, la única forma de almacenar datos es como archivos, o utilizando una terminología más precisa, objetos . Un objeto puede contener desde 1 byte cero bytes hasta 5 terabytes de datos, y se almacena en un contenedor . La página de S3 de Amazon presenta los hechos básicos con bastante claridad . (Para otras opciones de almacenamiento de datos en AWS, es posible que desee leer, por ejemplo, sobre SimpleDB ).
Si quiso decir sin crear un archivo temporal local, entonces la respuesta depende de qué biblioteca / herramienta está utilizando. (Como sugirió RickMeasham, ¡agregue más detalles!) Con la herramienta s3cmd, por ejemplo, no puede omitir la creación de un archivo temporal, mientras que con la biblioteca Java JetS3t cargar una cadena directamente sería fácil :
// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
¿Cómo puedo agregar una cadena como un archivo en amazon s3? Desde donde busqué, tuve que saber que podemos subir un archivo a s3. ¿Cuál es la mejor manera de cargar datos sin crear un archivo?
Esto funciona para mí:
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);
}
Existe una sobrecarga para el método AmazonS3.putObject que acepta la cadena de depósito, una cadena de clave y una cadena de contenido de texto. No lo había visto en el desbordamiento de la pila, así que estoy poniendo esto aquí. Será similar a la respuesta de @Jonik, pero sin la dependencia adicional.
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);
Hay una forma sencilla de hacerlo con PHP, simplemente envíe la cadena como el cuerpo del objeto, especificando el nombre del nuevo archivo en la clave:
$s3->putObject(array(
''Bucket'' => [Bucket name],
''Key'' => [path/to/file.ext],
''Body'' => [Your string goes here],
''ContentType'' => [specify mimetype if you want],
));
Esto creará un nuevo archivo de acuerdo con la clave especificada, que tiene un contenido como se especifica en la cadena.
No se ve tan bien, pero aquí es cómo puede hacerlo usando el cliente Java de Amazon, probablemente lo que hace JetS3t detrás de la escena de todos modos.
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;
}
}
Si está utilizando Java, visite 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);
}
}