以下載檔案來說,範例如下:
@Path("/file") @Provider public class FileProcessing { @GET @Path("/get") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response getFile () { Response response = null; File p12File = new File("/home/user/test"); byte[] bytes = StreamReader.get(p12File); if(bytes != null) { response = Response. ok(bytes, MediaType.APPLICATION_OCTET_STREAM_TYPE). header("content-disposition", "attachment; filename=" + p12File.getName()). header("content-MD5", this.getMd5Hash(p12File)). build(); } else { response = Response.serverError().status(404).build(); } return response; } }簡單來說,就是用 Response 物件的 ResponseBuilder 來建立一個客製化的 Response
需要塞什麼資料都可以透過 ResponseBuilder.ok() 把東西放進去~
然後在 ResponseBuilder.header() 方法去指定 Response 中需要的 Header(當然不放也可以)。
其中在範例程式碼中,StreamReader.get() 是我自己寫的小工具,目的就只是把 File 轉成 byte array 回傳而已。
上傳檔案的方法也很類似,在宣告 Method 時指定 @Consumes 的標記,然後取得 InputStream 後把 Stream 寫入到檔案即可。
參考資料:
1、Return a file using Java Jersey
2、Reading HttpURLConnection InputStream - manual buffer or BufferedInputStream?
3、File Upload Example In Jersey
沒有留言:
張貼留言