我正在玩泽西岛,想知道如何实现“下载”功能。例如,假设我有一些/files/
下的资源,我想通过GET
“下载”,我应该怎么做?我已经知道GET
,PUT
,POST
,DELETE
的正确注释和实现,但我不太清楚在这种情况下应该如何处理二进制数据。有人能请我指出正确的方向,还是给我一个简单的实施?我看过jersey-samples-1.4
,但我似乎无法找到所需的东西。如何在restlet中使用Jersey进行下载?
非常感谢!
我正在玩泽西岛,想知道如何实现“下载”功能。例如,假设我有一些/files/
下的资源,我想通过GET
“下载”,我应该怎么做?我已经知道GET
,PUT
,POST
,DELETE
的正确注释和实现,但我不太清楚在这种情况下应该如何处理二进制数据。有人能请我指出正确的方向,还是给我一个简单的实施?我看过jersey-samples-1.4
,但我似乎无法找到所需的东西。如何在restlet中使用Jersey进行下载?
非常感谢!
您应该使用@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);
}
}
};
}
谢谢!如果事先没有提供文件类型,但知道它是二进制文件?我假设'@ Produces'在方法上? (对不起,你是否介意用正确的注释说明它?我知道如何处理流媒体部分...) – carlspring 2013-04-29 13:31:44
好的,我编辑了我的文章。现在,你有方法的例子。我认为如果你的文件是二进制的,你应该使用APPLICATION_OCTET_STREAM。在这个例子中,我用过http://stackoverflow.com/a/3503704/987847 – pedjaradenkovic 2013-04-29 14:08:49
非常感谢! – carlspring 2013-04-29 14:09:39
REST API的泽西和restlet不是不同的实现吗?如果是这样,我不明白你为什么要同时使用两者。也许你的意思是“REST”而不是“Restlet”? – 2013-11-06 08:24:51