2

iOS 클라이언트에서 Google Cloud Endpoints와 GAE Python SDK 1.9.4를 사용하고 있습니다. Google은 AWS S3의 버킷에서 사용자에게 이미지를 제공하고 boto 라이브러리를 통해 iOS, GAE, AWS에 문제없이 상호 작용합니다.Google Cloud Endpoints를 통해 AWS S3에 UIImage 업로드

사용자가 아바타를 업데이트 할 수있는 구체적인 사용 사례가 있습니다. appserver에는 파일에서 base64 문자열 표현 및 클라이언트 소비를위한 반환 URL을 비롯하여 S3에서 이미지 데이터를 성공적으로 계산하고 업로드하는 단위 테스트가 있습니다. 파일 크기의 범위는 수 킬로바이트에서 수 메가입니다. 단위 테스트는 boto 컨트롤러와 그것을 호출하는 endpoints.api 래퍼를 포함합니다. iOS의 GTLBase64 도구뿐만 아니라 Python base64 라이브러리에서 비롯된 base64 문자열을 테스트했습니다. 문자열은 웹에 안전합니다. iOS에서 최대 압축률로 160x160 크기의 JPG 이미지를 만듭니다.이 압축률은 지속적으로 약 3K의 base64 문자열을 생성합니다. 우리가 성공적으로 avatarBytesField()에 이미지 데이터를 할당 BOTO 할 수있는 페이로드를 전송, 애플리케이션 서버 단위 테스트를 통해

class AvatarUploadRequest(messages.Message): 
    uid = messages.StringField(1) 
    avatar = messages.BytesField(2) 
    content_type = messages.StringField(3) 

다음 S3 호스팅 이미지를 볼 수 있습니다

은 protorpc 메시지 클래스입니다 브라우저에서.

API 탐색기와 생성 된 iOS 클라이언트를 통해 아바타 업로드 끝점과 상호 작용하려는 경우 문제가 발생합니다. API 서버는 단위 테스트에서 사용되는 알려진 양호한 데이터를 사용하여 지속적으로 503 Service Unavailable으로 실패합니다. API 서버가 작동하며 다른 모든 호출이 성공적으로 완료됩니다. 오류를 제거

{ 
    "error": { 
     "errors": [{ 
      "domain": "global", 
      "reason": "backendError", 
      "message": "" 
     }], 
     "code": 503, 
     "message": "" 
    } 
} 

는 POST 요청 본문에서 avatar 페이로드를 제거 : 아바타 업로드 엔드 포인트에 대한

의 경우에만, API 탐색기는 다음 응답을 반환합니다. @ endpoints-decorated 메소드의 코드가 실행됩니다. avatar 페이로드에서는 실행이 업스트림에서 실패합니다 (즉, 메서드의 코드가 실행되지 않습니다).

Endpoints API 서버의 제한 사항에 부딪 혔습니까? 우리는 이런 식으로 사용하지 않겠습니까?

문서를 수색 할 때 BytesField() 크기의 상한에 대한 언급이 없습니다. 큰 파일 (비디오, 이미지 등)에 Blobstore API를 사용하는 것에 대한 언급이 있지만 사용 사례에 맞지 않습니다. AppEngine, 데이터 저장소 또는 다른 방법으로 이미지 데이터를 저장하고 싶지는 않습니다. 앱 서버를 통해 이미지 데이터를 퍼널로 보내고 S3에 전달하면됩니다.

어떤 통찰력이라도 대단히 감사합니다.

답변

0

우리는이 문제를 해결하기 위해 필요한 조치를 취하고이를 후속 조치하고 싶었습니다.

Google Cloud Endpoints를 통해 업로드 할 수있는 바이너리 데이터에는 엄격한 상한선이있는 것 같습니다. 우리는 AWS와의 협의가 유일한 책임 인 모듈을 추출하고 다른 프레임 워크를 사용하여 새 끝점을 정의하기로 결정했습니다.

인수를 위해 새 모듈의 끝점을 Flask 마이크로 프레임 워크로 랩핑하고 boto 라이브러리를 통해 AWS로 이진 데이터를 업로드하는 것을 관리했습니다. Cloud Endpoints를 통해 위의 원본 게시물에서 실패한 것과 동일한 데이터는 현재 Flask를 통해 100 % 작동합니다.

관련 문제