2017-09-12 9 views
3

나는 File 객체 제공보다 FileDateBodyPart를 만드는 다른 방법이없는 것 같아요 :저지 REST 클라이언트 - 다중 생성 -하지 File 객체에서

public FileDataBodyPart(String name, File fileEntity) 

을하지만 내 경우는 내가 가지고있는 것은 바이트 [] 나는 그것을 파일로 변환하고 파일 시스템에 저장하고 싶지 않다.

다른 클라이언트 라이브러리를 사용하여 최악의 경우 byte, inputstream ...의 배열에서 멀티 파트를 생성하는 다른 방법이 있습니까?

UPDATE

: 여기 는 작업 코드 (하지만 난 [] 대신 파일의 바이트를 사용하려면) :

FileDataBodyPart filePart = new FileDataBodyPart("attachment", new File("C:/TEMP/test.txt")); 
MultiPart multipart = new FormDataMultiPart().bodyPart(filePart); 
Invocation.Builder invocationBuilder = webTarget.request().accept(MediaType.APPLICATION_JSON); 
Response response = invocationBuilder 
     .buildPost(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA)) 
     .invoke(); 
+0

질문이 다소 불분명합니다. 더 많은 코드를 보여주십시오. 당신의 의도는 무엇입니까? –

+0

질문이 업데이트되었습니다. – Mark

답변

2

FileDataBodyPart 파일을 받아 들일하기위한 다른 방법은 없습니다. JVM이 종료되면

해결 방법으로 임시 파일을 생성 및 삭제 할 수 있습니다 :

byte[] bytes = {1, 2, 3}; 

File tempFile = File.createTempFile("filename", null); 
tempFile.deleteOnExit(); 

FileOutputStream fos = new FileOutputStream(tempFile); 
fos.write(bytes); 
fos.close(); 

FileDataBodyPart filePart = new FileDataBodyPart("attachment", tempFile); 
+0

예, 옵션 일 수 있습니다. 감사. – Mark

2

FileDataBodyPart 그냥 편리한 클래스이다. 본문 부분을 만드는 데 사용할 수있는 유일한 유형은 아닙니다. FormDataMultuPart.bodyPart()에 대한 문서를 보면 인수로 BodyPart이 표시됩니다. Javadocs을 확인하십시오 (직접 검색 할 수 없음). BodyPart을 찾아 계층 구조를 탐색하면 (가장 일반적인 것)과 마찬가지로 StreamDataBodyPart과 같이 BodyPart에서 확장되는 몇 가지 클래스가 있습니다. 둘 중 하나를 사용할 수 있습니다.

InputStream이있는 경우 가장 쉬운 방법은 StreamDataBodyPart입니다. javadoc을 보라. 생성자가 오버로드되었다.

당신이 byte[]를 사용해야하는 경우, 당신은 단지 FormDataBodyPart

byte[] bytes = "HelloWorld".getBytes(StandardCharsets.UTF_8); 
FormDataContentDisposition fdcd = FormDataContentDisposition.name("test") 
     .fileName("hello.txt").build(); 
FormDataBodyPart bodyPart = new FormDataBodyPart(fdcd, bytes, MediaType.TEXT_PLAIN_TYPE); 
MultiPart multiPart = new FormDataMultiPart().bodyPart(bodyPart); 

부품보다 일반적인이 부분에 대한 약간의 정보를주고 Content-Disposition 헤더가 있어야 사용할 수 있으므로 서버가 제대로 처리 할 수 ​​있습니다. FileDataBodyPartStreamDataBodyPart은 내부적으로 FormDataContentDisposition의 생성을 처리하므로, 편의 클래스입니다.

+0

그건 제 선택입니다. 고맙습니다. – Mark