복붙노트

[SPRING] 파일을 MultiPartFile로 변환

SPRING

파일을 MultiPartFile로 변환

File 객체를 MultiPartFile로 변환 할 수있는 방법이 있습니까? 그래서 MultiPartFile 인터페이스의 객체를 받아들이는 메소드로 그 객체를 보낼 수 있습니까?

File myFile = new File("/path/to/the/file.txt")

MultiPartFile ....?

def (MultiPartFile file) {
  def is = new BufferedInputStream(file.getInputStream())
  //do something interesting with the stream
}

해결법

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

    1.이 목적으로 MockMultipartFile이 존재합니다. 스 니펫에서 파일 경로를 알고있는 경우 다음 코드가 유용합니다.

    이 목적으로 MockMultipartFile이 존재합니다. 스 니펫에서 파일 경로를 알고있는 경우 다음 코드가 유용합니다.

    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import org.springframework.mock.web.MockMultipartFile;
    
    Path path = Paths.get("/path/to/the/file.txt");
    String name = "file.txt";
    String originalFileName = "file.txt";
    String contentType = "text/plain";
    byte[] content = null;
    try {
        content = Files.readAllBytes(path);
    } catch (final IOException e) {
    }
    MultipartFile result = new MockMultipartFile(name,
                         originalFileName, contentType, content);
    
  2. ==============================

    2.

        File file = new File("src/test/resources/input.txt");
        FileInputStream input = new FileInputStream(file);
        MultipartFile multipartFile = new MockMultipartFile("file",
                file.getName(), "text/plain", IOUtils.toByteArray(input));
    
  3. ==============================

    3.

    MultipartFile multipartFile = new MockMultipartFile("test.xlsx", new FileInputStream(new File("/home/admin/test.xlsx")));
    

    이 코드는 나에게 잘 어울린다. 시도해 볼 수 있을지도 모른다.

  4. ==============================

    4.

        File file = new File("src/test/resources/validation.txt");
        DiskFileItem fileItem = new DiskFileItem("file", "text/plain", false, file.getName(), (int) file.length() , file.getParentFile());
        fileItem.getOutputStream();
        MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
    

    당신은

        fileItem.getOutputStream();
    

    그렇지 않으면 NPE를 던지기 때문입니다.

  5. ==============================

    5.내 경우에는

    내 경우에는

    fileItem.getOutputStream();
    

    작동하지 않았다. 따라서 저는 IOUtils를 사용하여 직접 만들었습니다.

    File file = new File("/path/to/file");
    FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false, file.getName(), (int) file.length(), file.getParentFile());
    
    try {
        InputStream input = new FileInputStream(file);
        OutputStream os = fileItem.getOutputStream();
        IOUtils.copy(input, os);
        // Or faster..
        // IOUtils.copy(new FileInputStream(file), fileItem.getOutputStream());
    } catch (IOException ex) {
        // do something.
    }
    
    MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
    
  6. from https://stackoverflow.com/questions/16648549/converting-file-to-multipartfile by cc-by-sa and MIT license