当前位置: 首页 > 面试题库 >

泽西岛客户端下载并保存文件

东门翰
2023-03-14
问题内容

我是球衣/ JAX-RS实施的新手。请在下面找到我的泽西岛客户代码以下载文件:

 Client client = Client.create();
 WebResource wr = client.resource("http://localhost:7070/upload-0.0.1-SNAPSHOT/rest/files/download");
 Builder wb=wr.accept("application/json,application/pdf,text/plain,image/jpeg,application/xml,application/vnd.ms-excel");
 ClientResponse clientResponse= wr.get(ClientResponse.class);
 System.out.println(clientResponse.getStatus());
 File res= clientResponse.getEntity(File.class);
 File downloadfile = new File("C://Data/test/downloaded/testnew.pdf");  
 res.renameTo(downloadfile);
 FileWriter fr = new FileWriter(res);
 fr.flush();

我的服务器端代码是:

@Path("/download")
    @GET
    @Produces({"application/pdf","text/plain","image/jpeg","application/xml","application/vnd.ms-excel"})
    public Response getFile()
    {

        File download = new File("C://Data/Test/downloaded/empty.pdf");
        ResponseBuilder response = Response.ok((Object)download);
        response.header("Content-Disposition", "attachment; filename=empty.pdf");
        return response.build();
    }

在我的客户代码中,我收到200
OK的响应,但是我无法将文件保存在硬盘上。在下面的行中,我提到了需要保存文件的路径和位置。不知道这里出了什么问题,将不胜感激。谢谢!!

File downloadfile = new File("C://Data/test/downloaded/testnew.pdf");

问题答案:

我不知道是否让Jersey让您简单地回应一个文件,就像这里一样:

File download = new File("C://Data/Test/downloaded/empty.pdf");
ResponseBuilder response = Response.ok((Object)download);

可以 肯定使用StreamingOutput响应从服务器发送的文件,就像这样:

StreamingOutput stream = new StreamingOutput() {
    @Override
    public void write(OutputStream os) throws IOException,
    WebApplicationException {
        Writer writer = new BufferedWriter(new OutputStreamWriter(os));

        //@TODO read the file here and write to the writer

        writer.flush();
    }
};

return Response.ok(stream).build();

并且您的客户希望读取流并将其放入文件中:

InputStream in = response.getEntityInputStream();
if (in != null) {
    File f = new File("C://Data/test/downloaded/testnew.pdf");

    //@TODO copy the in stream to the file f

    System.out.println("Result size:" + f.length() + " written to " + f.getPath());
}


 类似资料:
  • 我的服务器端代码是: 在我的客户机代码中,我得到的响应为200OK,但我无法保存我的文件在硬盘在下面的行,我提到的路径和位置,文件需要保存。不知道这里出了什么问题,任何帮助都将不胜感激。提前谢谢!!

  • 问题内容: 我正在尝试使用Jersey客户端模拟对我的Web服务的HTTP请求。我尝试实现文档中的简单示例。这是我的短代码: 我什至没有实现整个示例,因为当前我在最后一行收到一个异常: 我只将此依赖项添加到我的: 我试图用谷歌搜索问题,以及调试应用程序,但我真的看不出问题出在哪里。 编辑 所有Maven依赖项: 问题答案: 这看起来像与JAX-RS API版本(包含MultiValuedMap)有

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 我想执行我们的服务器支持的 PATCH 请求,以便使用 Jersey 客户端进行测试。我的代码如下,有人可以让我知道下面的代码有什么问题吗? 这是完全的例外,

  • 问题内容: 我正在尝试编写一个使用Jersey客户端API访问RESTful Web服务的库。该服务需要设置cookie的登录请求,然后后续请求必须将该cookie设置为成功。登录请求按预期方式工作,我能够从登录响应中检索cookie,但似乎无法在后续请求中重新添加cookie。谁能说出我可能做错了什么。这是发出请求的代码: 当请求没有失败时,服务将以应用程序错误“ No Session”进行响应

  • 我正在编写一个rest客户机,它使用服务器的POST restful sevice。现在服务需要2个参数作为'form-data'中请求的一部分。 如果您有跨邮递员rest客户机,我们有一个选项来设置表单数据,并给出键值对参数。 现在,如何发送两个参数,即“文件名”,“文件版本”和它们的值作为表单数据的一部分?