Estoy usando AmazonS3Client en una aplicación de Android usando una solicitud getObject para descargar una imagen de mi bucket de Amazon S3.
Actualmente, recibo esta excepción:
com.amazonaws.services.s3.model.AmazonS3Exception:
The specified key does not exist.
(Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;
Aunque puedo ver el objeto con la clave especificada en mi bucket de S3.
android
amazon-web-services
amazon-s3
usuario4592690
fuente
fuente
Respuestas:
Bueno, este error es bastante sencillo. simplemente significa que su archivo no existe dentro del bucket de S3. Varias cosas pueden estar mal:
Podría estar intentando hacer referencia al archivo incorrecto. Vuelva a verificar la ruta que intentó recuperar.
Siempre que se cargó el archivo, debe haber fallado. Consulte los registros de su proceso S3Sync para ver si puede encontrar algún resultado relevante
Fuente
fuente
root
yerrors
al mismoindex.html
archivo. De esa manera, la aplicación de interfaz puede actuar como un truco y dar sentido a cualquier esquema de URL.Para mí, el objeto definitivamente existía y se cargó correctamente, sin embargo, su URL s3 aún arrojaba el mismo error:
<Code>NoSuchKey</Code> <Message>The specified key does not exist.</Message>
Descubrí que la razón era porque mi nombre de archivo contenía un
#
símbolo, y supongo que ciertos caracteres o símbolos también causarán este error.Eliminar este carácter y generar la nueva URL s3 resolvió mi problema.
fuente
Tenga en cuenta que esto puede suceder incluso si la ruta del archivo es correcta debido al eventual modelo de coherencia de s3 . Básicamente, puede haber cierta latencia para poder leer un objeto después de que está escrito. Consulte esta documentación para obtener más información.
fuente
En mi caso, fue porque el nombre del archivo contenía espacios. Solucionado gracias a esta documentación (que no está relacionada con el problema):
from urllib.parse import unquote_plus key_name = unquote_plus(event['Records'][0]['s3']['object']['key'])
También debe cargar urllib como una capa con la versión correspondiente (si su lambda es Python 3.7, debe empaquetar urllib en un entorno de python 3.7).
La razón es que AWS transforma '' en '+' (por qué ...) lo cual es realmente problemático ...
fuente
En mi caso, el error aparecía porque había cargado toda la carpeta, que contenía los archivos del sitio web, en el contenedor.
Lo resolví moviendo todos los archivos fuera de la carpeta, directamente al contenedor.
fuente
No olvide que los depósitos son específicos de la región. Eso podría ser un problema.
También intente usar la consola S3 para navegar hasta el objeto real, y luego haga clic en
Copy Path
, obtendrá algo como:s3://<bucket-name>/<path>/object.txt
Siempre y cuando lo que sea que le esté pasando a analizar correctamente, creo que es lo más seguro que puede hacer.
fuente
El motivo del problema es incorrecto o error tipográfico en el nombre del depósito / clave. Verifique si el nombre del depósito o de la clave que está proporcionando existe.
fuente
Paso 1: obtenga lo último
aws-java-sdk
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.660</version> </dependency>
Paso 2: las importaciones correctas
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing;
Si está seguro de que el depósito existe,
Specified key does not exists error
significaría que el nombre del depósito no está escrito correctamente (contiene una barra diagonal o caracteres especiales). Consulte la documentación para conocer la convención de nomenclatura.El documento cita:
AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_KEY); AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build(); ObjectListing objects = s3Client.listObjects("bigdataanalytics"); System.out.println(objects.getObjectSummaries());
fuente
También me encontré con este problema, pero en mi caso, sin darme cuenta, estaba cambiando el estado interno de mi clave de objeto de origen al construir la clave de destino:
source_objects.each do |item| key = item.key.sub!(source_prefix, dest_prefix) item.copy_to(bucket: dest_bucket, key: key) end
Soy nuevo en Ruby y me perdí que
sub!
tiene efectos secundarios ysub
debería haber sido usado en su lugar.fuente