Elastic Beanstalk에서 호스팅되는 Spring Web Application을 구축 중입니다. S3를 사용하여 사용자가 업로드 한 이미지를 저장합니다. 내가 이해할 수없는 것은 S3에서 클라이언트 작업으로 이미지를 가져 오는 방법입니다. 나는 세 가지 대안을 발견했다.Spring Application - Amazon S3에서 클라이언트로 이미지 가져 오기
1. 컨트롤러에서 이미지를 가져 와서 클라이언트에게 보냅니다. 이와 같이 :
S3Object object = amazonS3Client.getObject("bucketname", "path/to/image");
2. 이미지를 모두 열고 클라이언트의 URL로 직접 엽니 다. 다음과 같이 입력하십시오 :
<img src="http://aws.amazon.com/bucket/path/to/image.jpg">
3. 특정 시간 동안 만 작동하는 서명 된 다운로드 URL을 사용하십시오. 좋아요 :
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest("bucketname", "path/to/image");
String url = conn.generatePresignedUrl(request)
확실하지 않은 방법은 무엇인가요? 웹 서버를 통해 라우팅하면 서버를로드하기 때문에 불필요한 것처럼 보입니다. 모든 사람에게 URL을 열면 누구나 이미지를 사용할 수 있으므로 더 많은 요청과 비용이 발생할 수 있습니다. 그리고 제 3의 길은 나에게 새로운 것이고, 이것이 실제로가는 길인 지 안다면 나를 괴롭히는 사람을 실제로 보지 못했습니다.
이렇게 일반적으로 어떻게 수행됩니까?
그리고 어떻게 이것을 개발 환경 대 프로덕션 환경에서 사용합니까? 그게 변하지 않는 것 같아? 또는 스프링 프로파일을 사용하여 개발 중 정적 컨텐츠의 위치를 변경하고 제작을 위해 S3 만 사용하는 것이 일반적입니까?
S3의 CSS 인 호스팅 자바 스크립트를 사용하는 경우 접근 방식 2를 사용하여 모든 사용자를위한 가장 일반적인 방법은 무엇입니까?
감사합니다. 비 민감한 이미지 (아바타)로 접근 방식 2로 갈 것입니다. 각 이미지 URL을 데이터베이스에 저장합니까? 이미지 확장 기능을 알지 못하기 때문에이를 데이터베이스의 각 사용자 엔티티에 저장한다고 생각합니다. 내 URL은 다음과 같습니다. s3-eu-west-1.amazonaws.com/BUCKETNAME/images/avatars/USERID-avatar.EXTENSION – nilsi
일반적으로 가능한 경우 URL을 저장하지 않으려 고합니다. 필연적 인 시나리오로 URL이 변경되어 DB를 업데이트해야합니다. 특정 사용자에게 주어진 URL을 생성하는 것이 훨씬 좋습니다. 이미지 확장 측면에서 나는 두 가지 옵션, 1 : 사용자가 특정 확장을 업로드하도록 강요하거나 가능하지 않은 경우 2 : 사용자에 대해 db에 프로필 이미지 확장을 저장합니다 (사용자가 제안한대로) . –
감사합니다. 확장을 저장합니다. – nilsi