如何在restlet中使用Jersey进行下载?

时间:2013-04-29 10:54:41

标签: java jersey

我正在玩泽西岛,想知道应该如何实现“下载”功能。例如,假设我在/files/下有一些资源,我想通过GET“下载”我应该怎么做?我已经知道GETPUTPOSTDELETE的正确注释和实现,但我不太确定在这种情况下如何处理二进制数据。有人可以指出我正确的方向,或者向我展示一个简单的实现?我看过jersey-samples-1.4,但我似乎无法找到我要找的东西。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该使用@Produces批注指定哪个媒体类型文件(pdf,zip等)。可以在here找到此批注的Java规范。

您的服务器应该返回创建的文件。例如,在核心java中,您可以执行以下操作:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("path")
public StreamingOutput getFile() {
    return new StreamingOutput() {
        public void write(OutputStream out) throws IOException, WebApplicationException {
            try {
                 FileInputStream in = new FileInputStream(my_file);
                 byte[] buffer = new byte[4096];
                 int length;
                 while ((length = in.read(buffer)) > 0){
                    out.write(buffer, 0, length);
                 }
                 in.close();
            } catch (Exception e) {
                throw new WebApplicationException(e);
            }
        }
    };
}