내가하고 있어요 구문 분석하기 전에 요청의 유효성을 검사하는 SecureActionBuilder을 확장합니다. 파일 중 일부는 매우 클 수 있기 때문에 사용자 지정 Body Parser를 사용하여 들어오는 S3에 청크를 보내고 있습니다.입력으로 다중 파일을 소요하고 S3 인스턴스에 업로드 웹 응용 프로그램을 작성하는 몸
파일을 업로드하기 전에 요청에 대한 유효성 검사를하고 싶습니다. 사용자에게 사용 권한/충분한 공간 등이 있음). Play 문서를 읽으면서 ActionBuilder를 확장하는 것이 올바른 방법이라고 생각합니다. 나는 SecureSocial에서 SecureActionBuilder를 발견했으며 안전한 동작을 구축하기 위해 이것을 확장해야한다고 믿는다.
은 내가 때문에 사용자에 따라 작업을 수행 할 수있는, 사용자 ID를 출력 할 수 있는지를보기 위해 간단한 테스트를 시도했다.object FileValidationAction extends SecuredActionBuilder {
def invokeBlock[A](request: SecuredRequest[A], block: SecuredRequest[A] => Future[SimpleResult]) = {
Logger.info("User id is " + request.user.userProfile.userId)
block(request)
}
}
그러나이 메서드는 절대로 호출되지 않았습니다.
다음, 나는 SecuredActionBuilder 개체에서 메서드를 재정의하려고 :
object FileValidationAction extends SecuredActionBuilder {
override def invokeBlock[A](request: Request[A], block: SecuredRequest[A] => Future[SimpleResult]) = {
val securedResult: Option[SecuredRequest[A]] = request match {
case r: SecuredRequest[A] => Option(r)
case _ => None
}
Logger.info("Calling action ------- WOO!")
securedResult match {
case Some(r) =>
block(r)
case _ =>
Future.successful(Forbidden)
}
}
}
메서드를 호출하지만, 들어오는 요청이 내가 기대했다으로 SecuredRequest 아니다 가져옵니다.
어떻게 내가 그것을 업로드를 완료 (또는 시작) 이전에 검증 할 수있는 사용자 정의 몸 파서를 사용하여 SecuredAction를 구축합니까?
편집 :
def upload = FileValidationAction(streamingBodyParser(streamConstructor)) { request =>
이 완벽하게 작동, 감사합니다! – eliot
당신을 환영합니다! – Jorge
아직도 오류가 발생합니다. BodyParser는 파일 유효성 검사가 수행되기 전에 실행됩니다. 업로드하기 전에 파일을 검사해야합니다. 이 일을 할 수있는 방법이 있습니까? – eliot