¿Cómo puedo agregar una cadena como un archivo en amazon s3? De lo que busqué, llegué a saber que podemos subir un archivo a s3. ¿Cuál es la mejor manera de subir datos sin crear un archivo?¿Cómo escribir una cadena en el cubo de Amazon S3?
Respuesta
¿Cuál es la mejor manera de cargar datos sin crear un archivo?
Si quieres decir sin crear un archivo en S3, bueno, realmente no puedes hacer eso. En Amazon S3, el único 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 . Amazon's S3 homepage lays out the basic facts quite clearly. (Para otras opciones de almacenamiento de datos en AWS, es posible que desee leer, por ejemplo, sobre SimpleDB.)
Si quiere decir sin crear un archivo temporal local, la respuesta depende de qué biblioteca/herramienta está utilizando. (Como se sugiere RickMeasham, por favor añadir más detalles!) Con la herramienta s3cmd, por ejemplo, no se puede omitir la creación de archivos temporales, mientras que con la biblioteca de Java JetS3t la posibilidad de subir directamente una cadena would be easy:
// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
Un objeto en S3 también puede tener un tamaño de cero bytes, no el mínimo que sugiera. :) – chilts
Cómo se hace esto con la API de Amazonas, su versión de S3Object no tiene dicho constructor –
NO se ve tan bien, pero así es cómo puedes hacerlo usando Amazons Java Client, probablemente lo que JetS3t hace detrás de las escenas 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, echa un vistazo a 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);
}
}
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);
}
Hay un overload for the AmazonS3.putObject method que acepte la cadena de cubo, una cadena de clave, y una cadena de contenido de texto. No lo había visto en el desbordamiento de la pila, así que lo estoy poniendo aquí. Va a 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, basta con enviar la cadena como el cuerpo del objeto, especificando el nombre del archivo nuevo en la tecla -
$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.
Me sorprende que nadie tenga la respuesta correcta aquí. Ver official documentation aquí para Java API.
s3Client.putObject(new PutObjectRequest(S3_BUCKET_NAME, fileName, rawString));
Para más lenguajes de programación, por favor verifica here.
¿No es [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
De acuerdo con [documentos] (https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpJava.html). Asi es como se hace. –
Este documento se trata de cargar archivos, no hay nada sobre la carga de contenido como una cadena. La solución más simple y correcta está aquí - https://stackoverflow.com/a/42510981/7374267 – Valentin
- 1. Cómo enumerar _todos_ objetos en el cubo de Amazon S3?
- 2. ¿Cómo crear una carpeta en el cubo de Amazon S3 a través de PHP API?
- 3. Compruebe si existe una clave con un cierto prefijo en el cubo de Amazon S3
- 4. ¿Cómo puedo mapear varios dominios en el mismo cubo en Amazon S3?
- 5. SignatureDoesNotMatch - Amazon S3 API
- 6. ¿Cómo puedo hacer una copia de seguridad o sincronizar un cubo de Amazon S3?
- 7. Cómo definir permisos en Amazon S3
- 8. PHP/Amazon S3: Autenticación de cadena de consulta
- 9. Permisos de Amazon S3
- 10. Configurando el propietario de los objetos en un cubo S3
- 11. Publicación de datos del formulario en el cubo de Amazon S3
- 12. Paperclip y Amazon S3 ¿cómo hacer rutas?
- 13. Amazon S3 - ¿Cómo construir correctamente las URL que apuntan a los objetos en un cubo?
- 14. Concurrencia en Amazon S3
- 15. Eliminando las versiones de cada archivo en un cubo de Amazon S3 anterior a X días
- 16. ¿Cómo crear un enlace de descarga para un objeto de cubo de Amazon S3?
- 17. zcat en amazon s3
- 18. Amazon S3 boto: ¿cómo crear una carpeta?
- 19. Iniciar sesión en Amazon S3
- 20. Arquitectura de Amazon S3
- 21. Sin conexión Amazon S3
- 22. Python: Amazon S3 no puede conseguir el cubo: dice 403 Prohibido
- 23. ¿Recibe una notificación cuando el usuario carga un cubo S3?
- 24. ¿En qué región geográfica está almacenado mi cubo S3?
- 25. ¿Cómo elimino/cuento objetos en un cubo s3?
- 26. Límite S3 para objetos en un cubo
- 27. Amazon S3 - x-amz-meta
- 28. cómo eliminar archivos de Amazon S3 Bucket?
- 29. Amazon S3 y Checksum
- 30. ASP.NET MVC - Carga de una imagen en Amazon S3
Le sugiero que obtenga más ayuda si su pregunta tiene más detalles. Como en qué idioma está escribiendo y qué biblioteca, si hay alguna, está utilizando para interactuar con S3. – RickMeasham