Java 在Dropwizard中从Minio检索文件时,GET请求中的超时是如何处理的?

Java 在Dropwizard中从Minio检索文件时,GET请求中的超时是如何处理的?,java,rest,jetty,dropwizard,minio,Java,Rest,Jetty,Dropwizard,Minio,我想向Dropwizard应用程序添加GET请求,以便返回从Minio服务器检索的文件 考虑 @Path("/file") public class FileResource { @GET @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response getFile() throws Exception { InputStream is = minioClient.getObject("myb

我想向Dropwizard应用程序添加GET请求,以便返回从Minio服务器检索的文件

考虑

@Path("/file")
public class FileResource {

    @GET
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response getFile() throws Exception {
        InputStream is = minioClient.getObject("mybucket", "myobject");
  // timeout?
        return Response.ok(is)
                .header(HttpHeaders.CONTENT_DISPOSITION, 
                        "attachment; filename=\"file.txt\"")
                .build();
    }
}
Dropwizard GET请求会发生什么情况,然后从Minio检索文件需要很长时间,例如网络速度慢


servlet容器将文件从Minio复制到客户端是否正确?如果我将内容长度添加到响应中,请求将一直打开,直到复制完成?

Jersey会在您使用的重载中将InputStream自动转换为StreamingOutput,因此忽略Michael的建议。这已经在幕后发生了

您设置的mime类型不正确。如果您知道文件是文本,则需要定义要匹配的@products。如果某些框架检测到数据与提供的mime类型之间不匹配,那么它们将出现错误行为,因此在定义接口时,请尽量具体

请看下面关于使用正确mime类型的讨论


超时导致响应返回到客户端,并返回错误代码。您负责注册回调以处理错误响应

可能值得尝试StreamingOutput而不是返回InputStream,例如,我的以下问题是:InputStream是分块的还是整个输入流都加载到内存中了?似乎在rest调用中进行代理不符合rest的规范。你能详细说明一下吗?这样我就可以将此标记为接受答案。