2014-12-02 5 views
9

파일 다운로드를 위해 간단한 휴식 API를 작성하고 싶습니다.자바 스파크를 사용하여 다운로드하는 방법은 무엇입니까?

응답으로는 mimetype='application/zip'을 설정해야하지만 스트림을 반환하는 방법은 분명하지 않다는 것을 이해하면 문서를 찾을 수 없습니다.

http://sparkjava.com/

갱신 : 여기에 해결 예제 코드 :

public static void main(String[] args) { 
    //setPort(8080); 
    get("/hello", (request, responce) -> getFile(request,responce)); 
} 

private static Object getFile(Request request, Response responce) { 
    File file = new File("MYFILE"); 
    responce.raw().setContentType("application/octet-stream"); 
    responce.raw().setHeader("Content-Disposition","attachment; filename="+file.getName()+".zip"); 
    try { 

     try(ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(responce.raw().getOutputStream())); 
     BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) 
     { 
      ZipEntry zipEntry = new ZipEntry(file.getName()); 

      zipOutputStream.putNextEntry(zipEntry); 
      byte[] buffer = new byte[1024]; 
      int len; 
      while ((len = bufferedInputStream.read(buffer)) > 0) { 
       zipOutputStream.write(buffer,0,len); 
      } 
     } 
    } catch (Exception e) { 
     halt(405,"server error"); 
    } 

    return null; 
+0

참고 : 오류 코드'4xx'는 클라이언트 오류이며 일반적으로 '5xx' 서버 오류가 아닙니다. – scrutari

답변

9

당신은 무엇이 필요 this thread 유사하다. OutputStream을 닫고 원시 HTTPServletResponse를 반환하기 만하면됩니다.

try { 
    ... 
    zipOutputStream.flush(); 
    zipOutputStream.close(); 
} catch (Exception e) { 
    halt(405,"server error"); 
} 
return responce.raw();