2014-12-02 18 views
9

Tôi muốn viết api còn lại đơn giản để tải xuống tệp.Cách tải xuống tệp bằng cách sử dụng tia lửa java?

Tôi không thể tìm thấy tài liệu về điều đó như tôi đã hiểu Tôi cần đặt mimetype='application/zip' để trả lời nhưng không rõ cách quay lại luồng.

http://sparkjava.com/

update: giải quyết ở đây mã ví dụ:

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

Chỉ cần lưu ý: mã lỗi '4xx' là lỗi máy khách, không phải là lỗi máy chủ thường là' 5xx'. – scrutari

Trả lời

9

gì bạn cần là tương tự như this thread. Bạn chỉ cần đóng OutputStream và trả về HTTPServletResponse thô:

try { 
    ... 
    zipOutputStream.flush(); 
    zipOutputStream.close(); 
} catch (Exception e) { 
    halt(405,"server error"); 
} 
return responce.raw(); 
Các vấn đề liên quan