[SPRING] 멀티 파트 파일을 파일로 변환하는 방법?
SPRING멀티 파트 파일을 파일로 변환하는 방법?
다중 파트 파일 (org.springframework.web.multipart.MultipartFile)을 File (java.io.File)로 변환하는 가장 좋은 방법은 무엇입니까?
내 봄 mvc 웹 프로젝트에서 나는 Multipart 파일로 파일을 업로드하고 있어요. 파일 (io)로 변환해야합니다.이 이미지는 서비스 (Cloudinary)를 저장하는 호출 할 수 있습니다. 그들은 형식 (파일) 만 가져옵니다.
나는 너무 많은 수색을했으나 실패했습니다. 누군가가 좋은 표준 방법을 알고 있다면 알려주세요. Thnx
해결법
-
==============================
1.getBytes 메서드를 사용하여 multipartFile의 내용을 가져올 수 있으며 FileOutputStream 클래스를 사용하여 File 클래스의 인스턴스를 만들 수 있습니다.
getBytes 메서드를 사용하여 multipartFile의 내용을 가져올 수 있으며 FileOutputStream 클래스를 사용하여 File 클래스의 인스턴스를 만들 수 있습니다.
public File convert(MultipartFile file) { File convFile = new File(file.getOriginalFilename()); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); return convFile; }
transferTo 메소드를 사용할 수도 있습니다.
public File multipartToFile(MultipartFile multipart) throws IllegalStateException, IOException { File convFile = new File( multipart.getOriginalFilename()); multipart.transferTo(convFile); return convFile; }
-
==============================
2.허용 된 대답은 정확하지만 이미지를 cloudinary에 업로드하려는 경우 더 좋은 방법이 있습니다.
허용 된 대답은 정확하지만 이미지를 cloudinary에 업로드하려는 경우 더 좋은 방법이 있습니다.
Map upload = cloudinary.uploader().upload(multipartFile.getBytes(), ObjectUtils.emptyMap());
여기서 multipartFile은 org.springframework.web.multipart.MultipartFile입니다.
-
==============================
3.@PetrosTsialiamanis 게시물에 대한 작은 수정, new File (multipart.getOriginalFilename ()) 이것은 사용자가 쓰기 권한 문제를 겪을 수있는 서버 위치에 파일을 생성합니다. 작업을 수행하는 모든 사용자에게 쓰기 권한을 항상 부여 할 수있는 것은 아닙니다. System.getProperty ( "java.io.tmpdir")는 파일이 제대로 생성 될 임시 디렉토리를 생성합니다. 이렇게하면 파일이 생성되는 임시 폴더를 만들고 나중에 파일 또는 임시 폴더를 삭제할 수 있습니다.
@PetrosTsialiamanis 게시물에 대한 작은 수정, new File (multipart.getOriginalFilename ()) 이것은 사용자가 쓰기 권한 문제를 겪을 수있는 서버 위치에 파일을 생성합니다. 작업을 수행하는 모든 사용자에게 쓰기 권한을 항상 부여 할 수있는 것은 아닙니다. System.getProperty ( "java.io.tmpdir")는 파일이 제대로 생성 될 임시 디렉토리를 생성합니다. 이렇게하면 파일이 생성되는 임시 폴더를 만들고 나중에 파일 또는 임시 폴더를 삭제할 수 있습니다.
public static File multipartToFile(MultipartFile multipart, String fileName) throws IllegalStateException, IOException { File convFile = new File(System.getProperty("java.io.tmpdir")+"/"+fileName); multipart.transferTo(convFile); return convFile; }
ur 공용 유틸리티에이 메서드를 넣고 예를 들어 같이 사용합니다. Utility.multipartToFile (...)
-
==============================
4.Apache Commons IO 라이브러리와 FileUtils 클래스를 사용할 수도 있습니다. Maven을 사용하는 경우 위의 의존성을 사용하여로드 할 수 있습니다.
Apache Commons IO 라이브러리와 FileUtils 클래스를 사용할 수도 있습니다. Maven을 사용하는 경우 위의 의존성을 사용하여로드 할 수 있습니다.
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
MultipartFile의 소스는 디스크에 저장됩니다.
File file = new File(directory, filename); // Create the file using the touch method of the FileUtils class. // FileUtils.touch(file); // Write bytes from the multipart file to disk. FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());
-
==============================
5.Alex78191의 대답이 저에게 효과적이었습니다.
Alex78191의 대답이 저에게 효과적이었습니다.
public File getTempFile(MultipartFile multipartFile) { CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile; FileItem fileItem = commonsMultipartFile.getFileItem(); DiskFileItem diskFileItem = (DiskFileItem) fileItem; String absPath = diskFileItem.getStoreLocation().getAbsolutePath(); File file = new File(absPath); //trick to implicitly save on disk small files (<10240 bytes by default) if (!file.exists()) { file.createNewFile(); multipartFile.transferTo(file); } return file; }
10240 바이트보다 큰 파일을 업로드하려면 multipartResolver의 maxInMemorySize를 1MB로 변경하십시오.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- setting maximum upload size t 20MB --> <property name="maxUploadSize" value="20971520" /> <!-- max size of file in memory (in bytes) --> <property name="maxInMemorySize" value="1048576" /> <!-- 1MB --> </bean>
-
==============================
6.MultipartFile 인터페이스 클래스가 CommonsMultipartFile이면 캐스팅하여 Spring의 임시 파일에 액세스 할 수 있습니다.
MultipartFile 인터페이스 클래스가 CommonsMultipartFile이면 캐스팅하여 Spring의 임시 파일에 액세스 할 수 있습니다.
public File getTempFile(MultipartFile multipartFile) { CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile; FileItem fileItem = commonsMultipartFile.getFileItem(); DiskFileItem diskFileItem = (DiskFileItem) fileItem; String absPath = diskFileItem.getStoreLocation().getAbsolutePath(); File file = new File(absPath); //trick to implicitly save on disk small files (<10240 bytes by default) if (!file.exists()) { file.createNewFile(); multipartFile.transferTo(file); } return file; }
10240 바이트 미만의 파일로 트릭 제거 maxInMemorySize 속성은 @Configuration @EnableWebMvc 클래스에서 0으로 설정할 수 있습니다. 그 후에 업로드 된 모든 파일은 디스크에 저장됩니다.
@Bean(name = "multipartResolver") public CommonsMultipartResolver createMultipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("utf-8"); resolver.setMaxInMemorySize(0); return resolver; }
-
==============================
7.
private File convertMultiPartToFile(MultipartFile file ) throws IOException { File convFile = new File( file.getOriginalFilename() ); FileOutputStream fos = new FileOutputStream( convFile ); fos.write( file.getBytes() ); fos.close(); return convFile; }
from https://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 테스트 용 임베디드 H2 데이터베이스 용 스프링 구성 (0) | 2018.12.22 |
---|---|
[SPRING] 봄 보안 HTTP RESTFul에 기본 및 웹용 FormLogin (쿠키) - 주석 (0) | 2018.12.22 |
[SPRING] Spring-Boot : 최대 연결 수와 같은 JDBC 풀 속성을 어떻게 설정합니까? (0) | 2018.12.22 |
[SPRING] 스프링 데이터에서 PagedResourcesAssembler를 올바르게 사용하는 방법은 무엇입니까? (0) | 2018.12.21 |
[SPRING] 봄 부팅 보안 CORS (0) | 2018.12.21 |