2016-07-03 2 views
3

완료되기 전에 클라이언트가 파일을 볼 수, 나는 다음과 같은 발견아마존 S3가 : 업로드 <a href="http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html" rel="nofollow">http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html</a>에서

아마존 S3는 부분 객체를 추가하지; 성공 응답을 받으면 Amazon S3가 전체 객체를 양동이에 추가했습니다.

그러나 그 말은 입니다.은 성공적인 응답을 받았습니다. 다른 클라이언트는 버킷에 객체를 나열 할 때 객체를 볼 수 있음을 보장합니까 - 객체 전체가 업로드 될 때까지?

S3를 "스풀"디렉토리로 사용하고 싶습니다. 거기에 파일을 업로드하고 다른 클라이언트는 정기적으로 파일을 나열한 다음 다운로드합니다. 완전히 업로드되지 않은 파일을 다운로드하려고하지 않습니다.

답변

4

대답은이 같은 라인을 따라입니다 :

아마존 S3는 결코 "에서"부분 객체

업로드가 완료 될 때까지 업로드되고 있던 내용이 기술적으로하지 않습니다를 추가하지 버킷.

S3는 알고 계시 겠지만 계층 적 파일 시스템이 아닙니다. 적어도 두 가지 중요한 구성 요소 인 백킹 스토어와 일반적인 파일 시스템과는 달리 인덱스가 분리되어 있기 때문에 객체를 작성할 때 실제로 "적절한 위치에"쓰지는 않습니다. 개체를 업로드하면 개체가 보조 저장소에 저장되고 인 경우GET에 의해 사용되는 버킷의 인덱스와 검색을 위해 저장된 데이터 및 메타 데이터를 가져 오는 다른 요청에 추가합니다.

인덱스에 항목이 없으면 개체에 액세스 할 수 없습니다. 그래서 너는 좋아. 아직 업로드가 완료되지 않은 객체를 다운로드하는 것은 불가능합니다. 객체는 기술적으로 아직 존재하지 않습니다.

마찬가지로 객체가 이미 존재하고 덮어 쓰기를 시작하면 다운로드를 시도하는 사람은 적어도 업로드가 완료 될 때까지 객체의 "이전"사본을 얻습니다. 버전이 지정되지 않은 버킷에서도 마찬가지입니다 enabled - 덮어 쓰기는 실제 객체를 덮어 쓰지 않고 색인 항목을 덮어 씁니다. 이는 업로드가 완료 될 때만 발생합니다. 이 메커니즘은 기존 개체를 덮어 쓰는 요청 인 PUT에 적용되는 결과 일관성 모델을 담당하는 것으로 보입니다.


주, 데이터 무결성에 관하여 : 당신은 업로드를 사용하고 어떤 것은 Content-MD 요청 헤더를 설정해야합니다. 이렇게하면 전송 오류를 감지하는 메커니즘을 S3에 제공하여 손상된 업로드를 방지하고 업로드되는 컨텐트가 일치하지 않으면 오류가 발생합니다.

관련 문제