【问题标题】:How is the timeout in a GET request handled when retrieving a file from Minio in Dropwizard?从 Dropwizard 中的 Minio 检索文件时,如何处理 GET 请求中的超时?
【发布时间】:2018-04-12 08:39:19
【问题描述】:

我想向我的 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 复制到客户端是否正确,如果我将内容长度添加到响应中,请求会一直打开,直到复制完成?

【问题讨论】:

  • 可能值得尝试使用 StreamingOutput 而不是返回 InputStream,例如stackoverflow.com/questions/12012724/…
  • 我的以下问题是:InputStream 是分块还是整个输入流都加载到内存中?
  • 似乎在 rest 调用中进行代理不符合 REST 的规范。
  • 您能否详细说明一下,以便我可以将其标记为已接受的答案。

标签: java rest jetty dropwizard minio


【解决方案1】:

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

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

查看Question,了解有关使用正确 mime 类型的讨论。

超时会导致向客户端返回带有错误代码的响应。您负责注册回调以处理错误响应。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 2012-10-30
    • 1970-01-01
    • 2013-06-10
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多