문제

우리의 "사용자"모델에는 작은 프로필 사진이 필요하며 처리 방법을 완전히 확실하지 않습니다. 물론 우리는 디스크의 폴더에 저장하고 경로/파일 이름을 데이터베이스에 저장할 수 있지만 DB 자체에 저장 될 것이라고 생각합니다.

나의 첫 번째 생각은 다음과 같은 모델에 속성을 갖는 것이 었습니다.

[Property] 
public byte[] ProfilePicture
{
  get;
  set;
}

그러나 데이터베이스에서 바이트 어레이를 얻은 다음 일종의 핸들러를 사용하여 이미지로 변환하기 위해 먼 길을 가야 할 것 같습니다.

이런 종류의 것을 처리하는 방법에 대한 좋은 튜토리얼을 본 사람이 있습니까? 모노레일에 특정한 것을 찾을 수있는 충분한 요구 사항 인 것 같습니다. 그러나 지금까지 내 검색이 비워졌습니다.

도움이 되었습니까?

해결책

데이터베이스 또는 파일에 이미지 저장에 대해서는 참조하십시오 이 질문.

DB에 저장하기로 결정했다면 가장 중요한 것은 ~하지 않다 검색 byte[] 사용자를 쿼리 할 때마다 잠재적으로 많은 데이터와 성능 문제 일 수 있습니다. 그렇게하려면 이미지를 다른 테이블에 저장하거나 맵핑 할 수 있습니다. byte[] 동일한 테이블을 가진 다른 엔티티에게 (사용자가 하나의 사진 만 가질 수 있다고 가정) :

[ActiveRecord("users")]
public class UserWithoutPicture {
  [PrimaryKey]
  public virtual int Id {get;set;}
...
  [BelongsTo]
  public virtual UserProfilePicture ProfilePicture {get;set;}
}

[ActiveRecord("users")]
public class UserProfilePicture {
  [PrimaryKey]
  public virtual int Id {get;set;}

  [Property]
  public virtual byte[] Image {get;set;}
}

그래도 이것은 펑키 한 행동을 가질 것입니다. 예를 들어, 특정 사용자의 경우 ProfilePicture 결코 무효가되지 않을 것입니다. 실제로 삽입하거나 삭제하지 않습니다 UserProfilePicture 실제로 사용자이므로 대신 항상 업데이트됩니다. 그리고 당신은 추가 가입이 발생하며, 알아야합니다. n+1을 선택하십시오. 그것은 내 머리 꼭대기에서 벗어났습니다. 완전히 테스트되지 않았습니다.

결론 : 다른 테이블에 이미지를 저장하는 것이 훨씬 유연합니다.

당신이 편의를 원한다면 Image RAW 대신 byte[], 구현하다 IUserType. 하지만 이미지는 idisposable이라는 것을 기억하십시오. 열심히 적시에 그것을 처분합니다.

이미지를 반환하는 모노레일 컨트롤러 구현은 매우 간단합니다 ... [ARFetch] 얻기 위해 UserProfilePicture ID로 적절한 컨텐츠 유형으로 응답 스트림에 쓰십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top