Spring Boot에서 파일 업로드를 위한 임시 디렉토리를 지정하는 방법은 무엇입니까?
Spring Boot을 사용하고 있는데 사용자가 처리할 파일을 업로드할 수 있도록 해야 합니다.현재 파일은 /home/username/git/my project에 업로드되어 있어 좋지 않습니다.
Spring이 이러한 파일 업로드를 임시 디렉토리에 저장하도록 하려면 어떻게 해야 합니까?이 디렉토리는 애플리케이션 재시작(또는 기타 수단)에 의해 정기적으로 삭제됩니다.
이게 내가 시도했던 거야...효과가 없어요.파일이 아직 작업 디렉토리에 저장됩니다.
public class Application implements CommandLineRunner {
/*
* This doesn't seem to work.
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("128KB");
factory.setMaxRequestSize("128KB");
factory.setLocation(System.getProperty("java.io.tmpdir"));
return factory.createMultipartConfig();
}
/* other stuff, main(), etc */
}
PS 어플리케이션을 실행하여 어플리케이션을 실행하고 있으며 임베디드 Tomcat을 사용하고 있습니다.
갱신:
좋아, 내가 해결했어.다음과 같이 착신 Multipart File을 일반 파일로 변환했습니다.
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
대신 다음과 같이 지정된 임시 디렉토리에 새 파일을 생성해야 합니다.
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = File.createTempFile("temp", ".xlsx"); // choose your own extension I guess? Filename accessible with convFile.getAbsolutePath()
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
이제 application.properties 파일의 'multipart.location' 설정은 어떻게 됩니까?라고 물을 수 있습니다.이 설정은 돌이켜보면 명백하지만 사용 후 삭제 멀티파트 파일의 이동처만 제어합니다.스크립트를 사용하여 디렉토리를 보면 'upload_.tmp' 파일이 잠깐 나타났다가 사라집니다.'multipart.location'은 사용자가 생성할 수 있는 영구 파일 개체와는 아무런 관련이 없습니다.
(주의: application.properties 대신 위에서 MultipartBean 스니펫을 사용할 수 있지만, 저는 시도하지 않았습니다.왜 그렇게 하고 싶습니까?)
실제 temp 디렉토리의 값을 변경하려면 "-Djava.io.tmp=/path/to/module" VM 인수를 사용하여 스프링 부트 애플리케이션을 실행하기 전에 원하는 항목을 지정할 수 있습니다.
springboot 1.4.1로 설정합니다.풀어주다
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB
spring.http.multipart.enabled=true
spring.http.multipart.location= ..
괜찮을 거예요.
Spring Boot을 사용하고 있기 때문에,MultipartProperties
당신의 안에서application.properties
파일.
문서 속성의 예:
# MULTIPART (MultipartProperties)
multipart.enabled=true
multipart.file-size-threshold=0 # Threshold after which files will be written to disk.
multipart.location= # Intermediate location of uploaded files.
multipart.max-file-size=1Mb # Max file size.
multipart.max-request-size=10Mb # Max request size.
또한 MultipartProperties에서 자세한 설명을 읽을 수도 있습니다.
시스템에 tmpdir 를 설정하려면 , 다음과 같이 설정할 수 있습니다.
multipart.location=${java.io.tmpdir}
아직 프로그램 구성을 찾고 있는 경우:
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
final ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
final String location = System.getProperty("java.io.tmpdir");
final long maxFileSize = 128*1024;
final long maxRequestSize = 128*1024;
final MultipartConfigElement multipartConfig = new MultipartConfigElement(location, maxFileSize, maxRequestSize, 0);
registration.setMultipartConfig(multipartConfig);
return registration;
}
}
Windows 와 Linux 에서는 temp dir 에 후행 슬래시가 붙을 수 있습니다.멀티파트에는 새로운 파일명의 원인이 된tmp 파일이 보관되어 있습니다.tmp dir를 작성하면 문제가 해결됩니다.
String tempDir = System.getProperty("java.io.tmpdir");
if( !tempDir.endsWith("/") && !tempDir.endsWith( "\\") ) {
tempDir = tempDir+"/";
언급URL : https://stackoverflow.com/questions/29923682/how-does-one-specify-a-temp-directory-for-file-uploads-in-spring-boot
'programing' 카테고리의 다른 글
Spring Boot에서는 org.hibernate는 처리되지 않습니다.예외.제약 위반예외. (0) | 2023.03.27 |
---|---|
Angular의 .$on()이란JS (0) | 2023.03.27 |
최소화 없이 React의 실제 버전을 구축하는 방법은 무엇입니까? (0) | 2023.03.22 |
초기 상태를 redux로 설정하는 방법 (0) | 2023.03.22 |
사용자 정의 Word에서 결과를 제외하는 방법분류 용어별 MySQL 쿼리 누름 (0) | 2023.03.22 |