페이지를 새로 고친 후에 만 사용할 수있는 업로드 된 이미지 에 대한 답변에 언급 된 이유로 IDE의 프로젝트 폴더 (일명 서버의 배포 폴더)를 제외하고 액세스 가능한 위치에 저장합니다 .
IDE 프로젝트 폴더의 변경 사항은 서버의 작업 폴더에 즉시 반영되지 않습니다. IDE에는 서버의 작업 폴더가 마지막 업데이트와 동기화되도록하는 일종의 백그라운드 작업이 있습니다 ( "게시"라고하는 IDE 용어). 이것이 당신이보고있는 문제의 주요 원인입니다.
실제 코드에서는 업로드 된 파일을 webapp의 배포 폴더에 저장하는 것이 전혀 작동하지 않는 상황이 있습니다. 일부 서버는 기본적으로 또는 구성에 따라 배포 된 WAR 파일을 로컬 디스크 파일 시스템으로 확장하지 않고 대신 메모리에서 완전히 확장합니다. 기본적으로 배포 된 WAR 파일을 편집하고 다시 배포하지 않고는 메모리에 새 파일을 만들 수 없습니다.
서버가 배포 된 WAR 파일을 로컬 디스크 파일 시스템으로 확장하더라도 새 파일이 원래 WAR 파일의 일부가 아니기 때문에 새로 생성 된 모든 파일은 재배포 또는 간단한 재시작시 손실됩니다.
method를 사용 하지 않는 한getRealPath()
나 또는 다른 사람에게 정확히 로컬 디스크 파일 시스템에 저장되는 것은 중요 하지 않습니다 . 그 방법을 사용하는 것은 어쨌든 놀라운 일입니다.
저장 위치에 대한 경로는 여러 방법으로 정의 될 수 있습니다. 모든 것을 혼자서 해야합니다 . 아마도 이것은 서버가 모든 것을 자동으로 수행 할 것으로 예상했기 때문에 혼란이 발생하는 곳일 것입니다. 주의하시기 바랍니다 @MultipartConfig(location)
않습니다 하지 최종 업로드 대상을 지정하지만, 사건 파일 크기에 대한 임시 저장 위치는 메모리 저장 임계 값을 초과합니다.
따라서 최종 저장 위치에 대한 경로는 다음 방법 중 하나로 정의 할 수 있습니다.
하드 코딩 됨 :
File uploads = new File("/path/to/uploads");
다음을 통한 환경 변수 SET UPLOAD_LOCATION=/path/to/uploads
:
File uploads = new File(System.getenv("UPLOAD_LOCATION"));
다음을 통해 서버 시작 중 VM 인수 -Dupload.location="/path/to/uploads"
:
File uploads = new File(System.getProperty("upload.location"));
*.properties
파일 항목 upload.location=/path/to/uploads
:
File uploads = new File(properties.getProperty("upload.location"));
web.xml
<context-param>
이름 upload.location
과 가치 /path/to/uploads
:
File uploads = new File(getServletContext().getInitParameter("upload.location"));
있는 경우 서버 제공 위치를 사용합니다 (예 : JBoss AS / WildFly) .
File uploads = new File(System.getProperty("jboss.server.data.dir"), "uploads");
어느 쪽이든 다음과 같이 파일을 쉽게 참조하고 저장할 수 있습니다.
File file = new File(uploads, "somefilename.ext");
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath());
}
또는 사용자가 우연히 동일한 이름으로 기존 파일을 덮어 쓰지 못하도록 고유 한 파일 이름을 자동 생성하려는 경우 :
File file = File.createTempFile("somefilename-", ".ext", uploads);
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
part
JSP / Servlet에서 얻는 방법 은 JSP / Servlet 을 사용하여 서버에 파일을 업로드하는 방법에 나와 있습니다. part
JSF 에서 얻는 방법 은 어떻게 JSF 2.2 <h : inputFile>을 사용하여 파일을 업로드합니까? 저장된 파일은 어디에 있습니까?
참고 :에 정의 된 임시 저장 위치에 상대적인 경로를 해석하므로 사용 하지 마십시오 .Part#write()
@MultipartConfig(location)
또한보십시오: