Java 如何在restlet中使用Jersey进行下载?
我正在玩Jersey,想知道如何实现“下载”功能。例如,假设我在Java 如何在restlet中使用Jersey进行下载?,java,jersey,Java,Jersey,我正在玩Jersey,想知道如何实现“下载”功能。例如,假设我在/files/下有一些资源,我希望通过GET来“下载”这些资源,我应该如何做到这一点?我已经知道GET、PUT、POST、DELETE的正确注释和实现,但我不太确定在这种情况下应该如何处理二进制数据。谁能给我指出正确的方向,或者给我一个简单的实现?我已经看了jersey-samples-1.4,但似乎找不到我要找的东西 非常感谢 您应该使用@products注释来指定文件的媒体类型(pdf、zip等)。可以找到此注释的Java规范
/files/
下有一些资源,我希望通过GET
来“下载”这些资源,我应该如何做到这一点?我已经知道GET
、PUT
、POST
、DELETE
的正确注释和实现,但我不太确定在这种情况下应该如何处理二进制数据。谁能给我指出正确的方向,或者给我一个简单的实现?我已经看了jersey-samples-1.4
,但似乎找不到我要找的东西
非常感谢 您应该使用@products注释来指定文件的媒体类型(pdf、zip等)。可以找到此注释的Java规范 您的服务器应该返回创建的文件。例如,在core 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);
}
}
};
}
谢谢如果我事先没有文件类型,但知道它是二进制文件,那该怎么办?我假设
@products
在方法上?(对不起,你介意用一种带有适当注释的方法来说明它吗?我知道如何处理流媒体部分…)好的,我编辑了我的文章。现在,您有了方法示例。我认为如果你的文件是二进制的,你应该使用APPLICATION_OCTET_STREAM。在本例中,我使用了post,我正在处理您提供的代码,我似乎得到了一个返回的响应状态为405 Method Not Allowed
。有什么想法吗。。。?在客户端,我有WebResource-WebResource=client.resource(url);webResource.accept(MediaType.APPLICATION\u OCTET\u STREAM).get(String.class)
您必须指定实现服务的HTTP方法。例如,我使用@GET annotation指定对于特定的“路径”和GET HTTP请求,将执行此方法(服务)。结果我在@path中输入了一个错误,这就把一切都搞砸了。否则代码就没问题了。无论如何谢谢你!jersey和restlet不是RESTAPI的不同实现吗?如果是这样的话,我不明白你为什么要同时使用这两者。也许你的意思是REST
,而不是Restlet
?