gpt4 book ai didi

java - 使用 Retrofit 2.0 和 Spring Server 下载文件

转载 作者:行者123 更新时间:2023-12-01 09:22:49 34 4
gpt4 key购买 nike

我有一个使用 Retrofit 1.9 和 Spring Server 的 Android 应用程序。 Android应用程序可以完美下载文件。我正在尝试迁移到 Retrofit 2.0。

改造1.9代码

Controller 服务器:

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public void getMap(@PathVariable("filename")String filename
,HttpServletResponse response) throws IOException {
Files.copy(filename + ".zip", response.getOutputStream());
}

Android 接口(interface) API

@Streaming
@GET(GET_MAP)
public Response getMap(@Path("filename") long id);
<小时/>

因此,在谷歌搜索迁移后,为了下载 Retrofit 2.0 中的文件我必须使用Call<ResponseBody>在我的 Android 接口(interface) API 中。我尝试过这样的事情:

选项 1 Controller 服务器代码

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public void getMap(@PathVariable("filename")String filename
,HttpServletResponse response) throws IOException {
Files.copy(filename + ".zip", response.getOutputStream());
}

选项 2 Controller 服务器代码

@RequestMapping(value = GET_MAP , method = RequestMethod.GET)
public @ResponseBody HttpServletResponse getMap(@PathVariable("filename")String filename
,HttpServletResponse response) throws IOException {
Files.copy(filename + ".zip", response.getOutputStream());
return response;
}

Android 接口(interface) API

@Streaming
@GET(GET_MAP)
public Call<ResponseBody> getMap(@Path("filename") long id);

但是使用这两个选项,响应长度给我-1:

response.body().contentLength() = -1

我如何迁移 Controller 方法?

最佳答案

在服务器上尝试了几种响应配置后,这对我有用:

  1. 获取文件作为新文件

  2. 使用org.springframework.core.io.FileSystemResource.FileSystemResource库将文件作为 ResponseBody 传递。

    @RequestMapping(value = GET_MAP , method = RequestMethod.GET)
    public @ResponseBody Resource getMap(@PathVariable("filename")String filename ,HttpServletResponse response) throws IOException {
    File file = new File(filename + ".zip");
    return new FileSystemResource(file);
    }

关于java - 使用 Retrofit 2.0 和 Spring Server 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049827/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com