복붙노트

[SPRING] 메모리에 바이트 배열을 사용하여 Java 파일 객체 (또는 동등 물)를 만듭니다 (실제 파일은 제외).

SPRING

메모리에 바이트 배열을 사용하여 Java 파일 객체 (또는 동등 물)를 만듭니다 (실제 파일은 제외).

Java File 객체를 메모리에 만들고 (실제 파일을 만들지 않고) 내용을 바이트 배열로 채 웁니다.

이 작업을 수행 할 수 있습니까?

아이디어는 그것을 Spring InputStreamSource에 전달하는 것입니다. 아래의 메서드를 시도하고 있지만 "바이트 배열에 파일 이름이 포함되어 있지 않습니다."라는 메시지가 반환됩니다.

MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);      
helper.setFrom("no-reply@example.com", "xyz");
helper.setTo(email);
helper.setText(body,true);
helper.setSubject(subject);
helper.addInline("cImage",
        new InputStreamResource(new ByteArrayInputStream(imageByteArr)));

mailSender.send(message);

해결법

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

    1.전체 스택 추적을 붙여 넣을 수 있습니까? "메모리에"파일 같은 것이 없습니다. ByteArrayInputStream을 사용하면 충분합니다.

    전체 스택 추적을 붙여 넣을 수 있습니까? "메모리에"파일 같은 것이 없습니다. ByteArrayInputStream을 사용하면 충분합니다.

    Resource # getFilename ()을 구현해야합니다. 다음을 시도하십시오.

    helper.addInline("cImage", new ByteArrayResource(imageByteArr){
                @Override
                public String getFilename() {
                    return fileName;
                }
            });
    
  2. ==============================

    2.InputStreamResource의 다른 생성자를 사용해야 할 수도 있습니까?

    InputStreamResource의 다른 생성자를 사용해야 할 수도 있습니까?

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

    3.아마도 메서드의 다른 오버로드를 시도할만한 가치가 있습니다.

    아마도 메서드의 다른 오버로드를 시도할만한 가치가 있습니다.

    addInline(String contentId, 
              InputStreamSource inputStreamSource, 
              String contentType) 
    

    나.

    addInline("cImage", 
              new InputStreamSource () 
              {  
                 final private InputStream src = 
                                         new ByteArrayInputStream(imageByteArr);
                 public InputStream getInputStream() {return src;}
              },
              "image/jpeg"); // or whatever image type you use 
    
  4. ==============================

    4.첨부 파일 및 인라인 리소스를 지원하려면 MimeMessageHelper 개체를 올바르게 만드는 것이 중요합니다.

    첨부 파일 및 인라인 리소스를 지원하려면 MimeMessageHelper 개체를 올바르게 만드는 것이 중요합니다.

    예 : MimeMessageHelper helper = new MimeMessageHelper (message, true, "UTF-8");

    이 예제에서는 multipart가 true로 설정되어 있으므로 MULTIPART_MODE_MIXED_RELATED가 사용되며 첨부 파일과 인라인 리소스가 지원됩니다.

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

    5.피드 리소스를 addInline ()으로 변경해 보셨습니까? 리소스를 메모리에 저장하고 싶다면 org.springframework.core.io.ByteArrayResource를 시도했을 것이다.

    피드 리소스를 addInline ()으로 변경해 보셨습니까? 리소스를 메모리에 저장하고 싶다면 org.springframework.core.io.ByteArrayResource를 시도했을 것이다.

    최신 정보: addInline () 메서드의 DataSource 버전을 사용하고 바이트 배열 바운드 데이터 소스 개체를 사용하여 데이터를 도우미 클래스에 공급해야 할 수도 있습니다. 나는 다음을 시도 할 것이다 :

    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message);              
    helper.setFrom("no-reply@example.com", "xyz");
    helper.setTo(email);
    helper.setText(body,true);
    helper.setSubject(subject);
    
    // use javax.mail.util.ByteArrayDataSource
    ByteArrayDataSource imgDS = new ByteArrayDataSource( imageByteArr, "image/png");
    helper.addInline("cImage", imgDS);
    
    mailSender.send(message);
    
  6. from https://stackoverflow.com/questions/578305/create-a-java-file-object-or-equivalent-using-a-byte-array-in-memory-without by cc-by-sa and MIT license