Amazon S3 버킷에서 이미지를 다운로드하기 위해 getObject 요청을 사용하여 Android 앱에서 AmazonS3Client를 사용하고 있습니다.
현재이 예외가 발생합니다.
com.amazonaws.services.s3.model.AmazonS3Exception:
The specified key does not exist.
(Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;
내 S3 버킷에서 지정된 키가있는 객체를 볼 수 있지만.
답변
이 오류는 실제로 다소 간단합니다. 단순히 파일이 S3 버킷 내에 존재하지 않음을 의미합니다. 몇 가지 문제가있을 수 있습니다.
-
잘못된 파일을 참조하려고 할 수 있습니다. 검색하려는 경로를 다시 확인하십시오.
-
파일이 업로드 될 때마다 실패했을 것입니다. S3Sync 프로세스에 대한 로그를 확인하여 관련 출력을 찾을 수 있는지 확인하십시오.
답변
나를 위해 객체는 확실히 존재하고 올바르게 업로드되었지만 s3 URL은 여전히 같은 오류를 던졌습니다.
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
그 이유는 내 파일 이름에 #
기호가 포함되어 있기 때문이라는 것을 알았고 특정 문자 나 기호도이 오류를 일으킬 것 같습니다.
이 문자를 제거하고 새 s3 URL을 생성하면 문제가 해결되었습니다.
답변
이는 s3의 최종 일관성 모델 로 인해 파일 경로가 올바른 경우에도 발생할 수 있습니다 . 기본적으로 객체가 작성된 후 읽을 수있는 데 약간의 지연이있을 수 있습니다. 자세한 정보는 이 문서 를 참조하십시오.
답변
제 경우에는 파일 이름에 공백이 포함되어 있었기 때문입니다. 이 문서 덕분에 해결되었습니다 (문제와 관련이 없음).
from urllib.parse import unquote_plus
key_name = unquote_plus(event['Records'][0]['s3']['object']['key'])
또한 urllib를 해당 버전의 레이어로 업로드해야합니다 (람다가 Python 3.7 인 경우 Python 3.7 환경에서 urllib를 패키징해야 함).
그 이유는 AWS가 ”를 ‘+'(왜 …)로 변환하기 때문입니다.
답변
제 경우에는 웹 사이트 파일을 포함하는 전체 폴더를 컨테이너에 업로드했기 때문에 오류가 나타났습니다.
폴더 외부의 모든 파일을 컨테이너로 바로 이동하여 문제를 해결했습니다.
답변
버킷은 지역별로 다릅니다. 문제가 될 수 있습니다.
또한 S3 콘솔을 사용하여 실제 객체로 이동 한 다음을 클릭 Copy Path
하면 다음과 같은 결과가 나타납니다.
s3://<bucket-name>/<path>/object.txt
당신이 그것을 올바르게 파싱하기 위해 전달하는 한 그것이 가장 안전한 일이라고 생각합니다.
답변
문제의 원인이 잘못되었거나 버킷 / 키 이름의 오타입니다. 제공하는 버킷 또는 키 이름이 있는지 확인하십시오.