[SPRING] 스프링 부트 이미지 업로드 및 검색
SPRING스프링 부트 이미지 업로드 및 검색
나는 새로운 Spring Boot 응용 프로그램을 만들고 있으며 이미지를 저장하고 제공 할 수 있기를 원한다. 이미지를 응용 프로그램 디렉토리에 저장하고 싶다. 이리
이것은 지금 업로드가 어떻게 생겼는지입니다.
@PostMapping("/")
@ResponseBody
public String upload(@RequestPart String title, @RequestPart MultipartFile img) throws IOException{
String imgName = img.getOriginalFilename();
Post p = new Post();
p.setTitle(title);
p.setImageName(imgName);
postService.add(p);
File upl = new File("images/" + imgName);
upl.createNewFile();
FileOutputStream fout = new FileOutputStream(upl);
fout.write(img.getBytes());
fout.close();
return "ok";
}
이게 내가 이미지를 얻는 방법이다.
<img th:src="@{'images/' + ${post.imageName}}"/>
지금 나는 404를 얻고 나가 디렉토리에있는 몇몇 심상을보고 싶을 때 나는 얻는다
Fatal error reading PNG image file: Not a PNG file
작동 시키려면 어떻게해야합니까?
해결법
-
==============================
1.기본적으로 Spring Boot 애플리케이션은 다음 위치에있는 정적 이미지 (사례 이미지 포함)를 제공합니다.
기본적으로 Spring Boot 애플리케이션은 다음 위치에있는 정적 이미지 (사례 이미지 포함)를 제공합니다.
따라서 일반적으로 정적 / 이미지 /는 아마도 Thymeleaf가 렌더링을 위해 전달되어야하는 정적 이미지를 예상해야하는 곳일 것입니다. 그러나이 장소는 정적 인 내용에 관한 것이므로 일반적으로 업로드 된 (동적 인) 내용을 응용 프로그램 내에 저장하는 것은 좋지 않으므로 그렇게하지 않는 것이 좋습니다. 응용 프로그램을 다른 컴퓨터로 재배포하거나 옮기면 어떻게 될지 생각 했습니까? 귀찮은 방식으로 이미지를 백업 / 이동해야합니다. 더 나은 솔루션이 있습니다. 앱 외부의 별도 위치에 업로드 콘텐츠를 저장하거나 (예 : 구성 가능하고 여러 인스턴스에서 다시 사용할 수 있음) 이미지 데이터를 저장하기 위해 데이터베이스를 사용할 수도 있습니다. 또한 트랜잭션 컨텍스트 (예 : 분리 및 롤백)에서 이미지를 처리 할 수 있습니다.
하지만 이제 앱 안에 앱을 저장하려는 경우 검색 할 장소 (실제로 정적 인 콘텐츠)를 추가하여 위치를 확장 할 수 있습니다. Ajit의 대답과 설명서조차도 여전히 자신의 WebMvcConfigurerAdapter를 확장하는 조언을 제공하지만 개인적으로 WebMvcConfigurer를 구현하는 경향이 있습니다.
이 경우 다음과 같이 표시됩니다.
@Configuration public class AdditionalResourceWebConfiguration implements WebMvcConfigurer { @Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**").addResourceLocations("file:images/"); } }
-
==============================
2.이미지 폴더의 이미지에 액세스하려면,
이미지 폴더의 이미지에 액세스하려면,
다음과 같이 WebMvcConfigurerAdapter 클래스의 addResourceHandlers 메소드를 재정의해야합니다.
@Configuration public class ResourceConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**").addResourceLocations("file:images/"); } }
그 후에 URL에 다음과 같은 이미지를 추가 /
<img th:src="@{'/images/' + ${post.imageName}}"/>
-
==============================
3.jar 파일과 같은 디렉토리에 / static 폴더에 외부 파일을 저장할 수 있으며, spring은 기본적으로 그 파일을 검사합니다. 따라서 정적 / 이미지가 있거나 다음을 사용하여 이미지를 참조 할 수 있습니다.
jar 파일과 같은 디렉토리에 / static 폴더에 외부 파일을 저장할 수 있으며, spring은 기본적으로 그 파일을 검사합니다. 따라서 정적 / 이미지가 있거나 다음을 사용하여 이미지를 참조 할 수 있습니다.
따라서 새로운 파일 ( "/ static / images /"+ imgName)을 사용하고자합니다.
from https://stackoverflow.com/questions/45651119/spring-boot-images-uploading-and-serving by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 / 자바 스케줄링 태스크 (0) | 2019.04.08 |
---|---|
[SPRING] 메소드 레벨 보안으로 AccessDenied 처리 (0) | 2019.04.08 |
[SPRING] Spring MVC에서 기본 / 글로벌 날짜 형식을 ISO 8601로 설정합니다. (0) | 2019.04.08 |
[SPRING] 머리글에서 값을 가져 와서 body 매개 변수에 추가하라는 모든 요청을 꾸미는 방법? (0) | 2019.04.08 |
[SPRING] List와 함께 PropertyPlaceholderConfigurer 사용 (0) | 2019.04.08 |