복붙노트

[SPRING] 멀티 파트 파일을 파일로 변환하는 방법?

SPRING

멀티 파트 파일을 파일로 변환하는 방법?

다중 파트 파일 (org.springframework.web.multipart.MultipartFile)을 File (java.io.File)로 변환하는 가장 좋은 방법은 무엇입니까?

내 봄 mvc 웹 프로젝트에서 나는 Multipart 파일로 파일을 업로드하고 있어요. 파일 (io)로 변환해야합니다.이 이미지는 서비스 (Cloudinary)를 저장하는 호출 할 수 있습니다. 그들은 형식 ​​(파일) 만 가져옵니다.

나는 너무 많은 수색을했으나 실패했습니다. 누군가가 좋은 표준 방법을 알고 있다면 알려주세요. Thnx

해결법

  1. ==============================

    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. ==============================

    2.허용 된 대답은 정확하지만 이미지를 cloudinary에 업로드하려는 경우 더 좋은 방법이 있습니다.

    허용 된 대답은 정확하지만 이미지를 cloudinary에 업로드하려는 경우 더 좋은 방법이 있습니다.

    Map upload = cloudinary.uploader().upload(multipartFile.getBytes(), ObjectUtils.emptyMap());
    

    여기서 multipartFile은 org.springframework.web.multipart.MultipartFile입니다.

  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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;
        }
    
  8. from https://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file by cc-by-sa and MIT license