2012-10-19 3 views
3

CMS를 개발 중이며 사용자가 자신의 이미지, CSS 파일 등을 업로드 할 수있게하고 싶습니다. 리소스의 안전을 위해 애플리케이션 구조/배포 된 WAR 내에 업로드 된 파일을 저장하고 싶지 않습니다.Grails : 애플리케이션 외부에서 정적 컨텐츠 제공

Grails가 아닌 곳의 컨트롤러에서 Grails로 콘텐츠를 제공하는 가장 쉬운 방법은 무엇입니까?

+0

정적 콘텐츠를 제공하는 데 프론트 엔드를 사용하지 않는 이유는 무엇입니까? Nginx처럼, 예를 들어 –

+2

내가 당신의 문제를 이해하고 있는지 모르겠지만 ... 파일 시스템의 어떤 위치에서 이미지 (또는 다른 정적 인 내용)를 읽고 브라우저로 보내는 컨트롤러 메소드를 작성하기 쉽습니다. 프록시 같은 종류이지만 파일 시스템에서 전달. – nickdos

답변

1

;-) 확대됨에 많은 연구와 질문 후입니다, 나는 결정 데이터베이스의 정적 자원 (예 : 이미지)을 패키지화합니다. 이것의 장점은 다음과 같습니다

  1. 당신은 당신이 다른에 이미지를 저장 할 필요가 없습니다
  2. (재배포 당신이 그들 모두를 잃을 수있는 곳) 응용 프로그램 내에서 이미지를 포장 할 필요가 없습니다 애플리케이션에서 떨어진 서버상의 위치.
  3. Amazon S3와 같은 타사 서비스로 작업하지 않아도됩니다.
  4. 데이터베이스에서 파일을 제공하는 간단한 컨트롤러를 작성하는 것은 비교적 간단합니다.

단점은 : 당신은/액세스 파일 시스템에있는 파일을 조작 할 수

  1. .
  2. 데이터베이스가 커지고 매우 느려질 수 있습니다.
  3. 누군가 이미지를 요청할 때마다 데이터베이스 호출을해야합니다.

이러한 단점이 있지만 해결책을 찾기로했습니다. 이것은 내가 그들을 다루는 방법입니다 :

  1. 이것은 100 % 온라인 시스템이므로 문제되지 않습니다.
  2. 내 이미지가 작고 이미지가 많지 않으므로 문제가되지 않습니다.
  3. 효율적이고 쉬운 캐싱 메커니즘을 사용했습니다. 아래를 참조하십시오 :

을 내가 ETag를 사용 (documentation)를 만들고 이미지 서버 측 캐싱 EHCache는 (documentation)를 사용하여 스마트 브라우저 캐싱을 사용하고 있습니다. 새 이미지가 업로드 되 자마자 e- 태그가 변경되고 캐시가 지워 지므로 브라우저가 새로운 사본을 다운로드해야합니다.

지금까지 MySQL 데이터베이스의 성능 저하는 눈에 띄지 않았으며 성능은 매우 빠릅니다.자신의 게시물에 cdavis226에 의해 설명 된 바와 같이

1

적절한 도구를 통해 정적 컨텐츠를 제공하는 것이 올바른 방법이며, 모든 웹 서버는이를 달성 할 수있는 가능성을 제공합니다. Grails 애플리케이션에서이 컨텐트의 관리를 구현하려면 Config.groovy에서 정적 컨텐트의 대상을 구성 할 수있게하십시오.

, 당신은 ;-) 바퀴를 개혁하는 컨트롤러를 통해 파일 시스템에서 콘텐츠의 로딩을 구현하지 마십시오 또한 웹 서버가 훨씬 더

관련 문제