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

时间:2018-04-12 08:39:19

标签: 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("mybucket", "myobject");
  // timeout?
        return Response.ok(is)
                .header(HttpHeaders.CONTENT_DISPOSITION, 
                        "attachment; filename=\"file.txt\"")
                .build();
    }
}

使用Dropwizard GET请求然后从Minio检索文件会花费很长时间,例如慢网?

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

1 个答案:

答案 0 :(得分:1)

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

您正在设置不正确的mime类型。如果您知道文件是文本,则需要定义要匹配的@Produces。如果某些框架检测到数据与所提供的mime类型不匹配,那么它们会出现异常,因此在定义界面时尽量做到尽可能具体。

有关使用正确mime类型的讨论,请查看此Question

超时会导致将响应返回给客户端并显示错误代码。您负责注册回调以处理错误响应。