2013-04-29 37 views
0

我正在玩泽西岛,想知道如何实现“下载”功能。例如,假设我有一些/files/下的资源,我想通过GET“下载”,我应该怎么做?我已经知道GETPUT,POST,DELETE的正确注释和实现,但我不太清楚在这种情况下应该如何处理二进制数据。有人能请我指出正确的方向,还是给我一个简单的实施?我看过jersey-samples-1.4,但我似乎无法找到所需的东西。如何在restlet中使用Jersey进行下载?

非常感谢!

+0

REST API的泽西和restlet不是不同的实现吗?如果是这样,我不明白你为什么要同时使用两者。也许你的意思是“REST”而不是“Restlet”? – 2013-11-06 08:24:51

回答

1

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

您的服务器应该返回创建的文件。例如,在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); 
      } 
     } 
    }; 
} 
+0

谢谢!如果事先没有提供文件类型,但知道它是二进制文件?我假设'@ Produces'在方法上? (对不起,你是否介意用正确的注释说明它?我知道如何处理流媒体部分...) – carlspring 2013-04-29 13:31:44

+0

好的,我编辑了我的文章。现在,你有方法的例子。我认为如果你的文件是二进制的,你应该使用APPLICATION_OCTET_STREAM。在这个例子中,我用过http://stackoverflow.com/a/3503704/987847 – pedjaradenkovic 2013-04-29 14:08:49

+0

非常感谢! – carlspring 2013-04-29 14:09:39

相关问题