2017-10-04 6 views
0

에서 이진 파일 가져 :(여기서는 아파치 HttpClient를, 코 틀린 소스 코드) POST 요청을 보내는 POST 요청

val httpPost = HttpPost("http://localhost:8000") 
val builder = MultipartEntityBuilder.create() 
builder.addBinaryBody("file", File("testFile.zip"), 
     ContentType.APPLICATION_OCTET_STREAM, "file.ext") 
val multipart = builder.build() 
httpPost.entity = multipart 
val r = httpClient.execute(httpPost) 
r.close() 

을 나는 불꽃 자바 요청 객체를 통해 같은 내 게시물 처리기에서 요청을받을 수 있습니다. 게시물 요청에서 원본 파일 (파일 이름과 보너스)을 어떻게 검색합니까? 본문이 원본 파일보다 크기 때문에 request.bodyAsBytes() 메서드는 일부 바이트를 추가하는 것으로 보입니다.

덕분에, 스파크의 문서 페이지 하단 르그

답변

0

는 섹션 "Examples and FAQ"있다. 첫 번째 예는 '어떻게 업로드합니까?'입니다. 여기에서 example on GitHub으로 연결됩니다. 한마디로

:

post("/yourUploadPath", (request, response) -> { 
    request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp")); 
    try (InputStream is = request.raw().getPart("file").getInputStream()) { 
     // Use the input stream to create a file 
    } 
    return "File uploaded"; 
}); 

원본 파일 이름에 액세스하려면 : 여러 파일 또는 부품을 처리하려면

request.raw().getPart("file").getSubmittedFileName() 

을, 나는 보통에 포함 된 다음 (가정 전용 파일과 유사한 코드를 다중 부분 인코딩 업로드) :

for (Part part : req.raw().getParts()) { 
    try (InputStream stream = part.getInputStream()) { 
    String filename = part.getSubmittedFileName(); 
    // save the input stream to the filesystem, and the filename to a database 
    } 
} 
+0

감사 답장을하지만, 슬프게도 예는 다시 때문에 작동하지 않습니다 q.raw(). getParts() 또는 req.raw(). getPart ("file")는 단순히 게시물 처리기의 실행을 끝냅니다. 나는 spark-java의 깊은 곳에서 호출을 추적했다. POST 요청은 처리 된 것으로 표시되었다. 핸들러는 여전히 활성화되어 있지만 getParts() 또는 getPart()를 초과하여 실행되지 않습니다. 나는 Kotlin을 처음 사용하기 때문에 spark-java Kotlin 포트의 문제인지 확실하지 않습니다. – osx

+0

실행이 갑자기 멈추는 경우는 예외 일 가능성이 큽니다. 예외를 볼 수있는 추가 경로로 (불쾌한, Java 코드를 다시 확인하십시오.), \t \t'Spark.exception (Exception.class, (e, 요청, 응답) -> {e.printStackTrace();}); 코 틀린을 아는 사람). – cello

+0

답장을 보내 주셔서 다시 한 번 감사드립니다. JetBrains IDE는 코드를 'Spark.exception (Exception :: class.java, {e, request, response -> e.printStackTrace()})'로 변환하고 오류 (다중 메시지 없음)를 찾을 수있었습니다. 이제 코드는 (편집 된) 코드로 넘어 가서,'getParts()'가 빈리스트를 반환하기 때문에'java.lang.NullPointerException'을주게됩니다. 따라서'getPart ("file")'에 대한 예외입니다. POST 요청의 내용 유형은'multipart/form-data; 경계 = Z2Dl0386ZA0OMWccx1VRo6h7emmRriXNz'. – osx