以下載檔案來說,範例如下:
@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
沒有留言:
張貼留言