Jersey 客户端上传进度

2023-11-25

我有一个球衣客户端,需要上传一个足够大的文件以需要进度条。
问题是,对于需要几分钟的上传,我看到传输的字节数达到 100%申请一开始。然后需要几分钟时间来打印“on finish”字符串。
就好像字节被发送到缓冲区,我正在读取传输到缓冲区的速度而不是实际的上传速度。这使得进度条毫无用处。

这是非常简单的代码:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource("www.myrestserver.com/uploads");
WebResource.Builder builder = resource.type(MediaType.MULTIPART_FORM_DATA_TYPE);

FormDataMultiPart multiPart = new FormDataMultiPart();
FileDataBodyPart fdbp = new FileDataBodyPart("data.zip", new File("data.zip"));
BodyPart bp = multiPart.bodyPart(fdbp);
String response = builder.post(String.class, multiPart);

为了获取进度状态,我在调用 builder.post 之前添加了一个 ContainerListener 过滤器:

final ContainerListener containerListener = new ContainerListener() {

        @Override
        public void onSent(long delta, long bytes) {
            System.out.println(delta + " : " + long);
        }

        @Override
        public void onFinish() {
            super.onFinish();
            System.out.println("on finish");
        }

    };

    OnStartConnectionListener connectionListenerFactory = new OnStartConnectionListener() {
        @Override
        public ContainerListener onStart(ClientRequest cr) {
            return containerListener;
        }

    };

    resource.addFilter(new ConnectionListenerFilter(connectionListenerFactory));

在 Jersey 2.X 中,我使用了作家拦截器使用 Apache Commons IO CountingOutputStream 的子类包装输出流,该子类跟踪写入并通知我的上传进度代码(未显示)。

public class UploadMonitorInterceptor implements WriterInterceptor {

    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {

        // the original outputstream jersey writes with
        final OutputStream os = context.getOutputStream();

        // you can use Jersey's target/builder properties or 
        // special headers to set identifiers of the source of the stream
        // and other info needed for progress monitoring
        String id = (String) context.getProperty("id");
        long fileSize = (long) context.getProperty("fileSize");

        // subclass of counting stream which will notify my progress
        // indicators.
        context.setOutputStream(new MyCountingOutputStream(os, id, fileSize));

        // proceed with any other interceptors
        context.proceed();
    }

}

然后,我向客户端或您想要使用拦截器的特定目标注册了该拦截器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey 客户端上传进度 的相关文章

  • 如何对由 keycloak 保护的 SpringBoot 控制器进行单元测试?

    我知道已经有类似的问题了here https stackoverflow com questions 49144953 mocking a keycloak token for testing a spring controller and
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • Java 中字符串的最大长度 - 调用 length() 方法

    In Java 最大尺寸 a 是多少String对象可能有 指的是length 方法调用 我知道length 返回 a 的大小String as a char 考虑到String http docs oracle com javase 7
  • Log4j2 自动配置

    我在应用时遇到问题log4j2 xml自动配置正确 我认为这与我的文件夹排列有关 我在用着maven添加 log4j2 库并按如下方式安排我的项目 一个包含所有 通用 类的项目 供我的系统的服务器和客户端使用 另一个 核心 项目 服务器端应
  • 如何在gradle中执行jar文件?

    当我使用 ant 构建我的 android 项目时 我需要这样的任务
  • 颜色资源 ID 返回错误值

    我试图在 onCreate 期间以编程方式从颜色资源设置文本颜色 但得到了一些奇怪的结果 我在 res colors xml 中定义了一个颜色资源
  • 使用 Netbeans 导出 JAR

    如何使用Netbeans将java项目导出到JAR 我找不到像 Eclipse 那样的选项 您需要启用该选项 Project Properties gt Build gt Packaging gt Build JAR after compi
  • Java 更改包名称大小写约定的原因

    就在你说这是重复的之前 我已经看到了其他问题 但我仍然想发布这个 所以我在读用 Java 思考 Bruce Eckel这段话是关于小写命名约定的 Java 1 0 和 Java 1 1 中的域扩展com edu org net等 按照惯例都
  • 如何在 Java 中从任意基数转换为基数 10

    我是 Java 新手 我想编写一个程序 仅使用算术运算将基数 2 3 4 5 6 7 8 9 16 转换为基数 10 我已经完成了从键盘读取字符串 如果数字是十六进制 并将其转换为整数 之后我做了一个 while 循环 将数字分割为数字并将
  • 在手机上单步执行 Android 代码 - 大行号差异

    我正在尝试调试与 Samsung Captivate Galaxy S 上的 ListView 相关的一些代码 我在代码中的某个位置放置了断点 当它停止时 我会在堆栈上返回几帧到 ListView 源 现在 我可以预期会出现一些不匹配的情况
  • 计算两个 Java 日期实例之间的差异

    我正在使用Java的java util DateScala 中的类并想要比较Date对象和当前时间 我知道我可以使用 getTime 计算增量 new java util Date getTime oldDate getTime 然而 这只
  • 编辑 CSV 文件(设计实现)

    我开始设计一个程序 该程序将根据已找到并保存到主 CSV Excel 文件中的相似字符串及其标识 自动执行正确查找和识别字符串的过程 现在我想正确设计它 这样我以后在实现 CSV Excel 读写部分时就不会遇到问题 我可能会使用 Open
  • 什么是对象发布以及为什么我们需要它?

    在一次 Java 开发人员面试中 我被问到一个问题 什么是对象发布以及为什么我们需要它 我不确定我知道正确的答案 我认为对象发布是指将对象 变量 状态放入堆内存中 线程之间共享对象 变量 需要它 我对吗 如果我错了 请纠正我 我一直在搜索
  • java.util.Prefs 抛出 BackingStoreException - 为什么?

    我有一个系统可以缓存启动时 SOAP 调用的微小 简单结果 我需要实例能够在启动时重新加载其缓存 以防 SOAP 服务失效 并且还需要处理使用此缓存文件的多个实例的可能性 我选择使用java util prefs但是 Java 的内置自动同
  • 如何将报告导出为 PDF/A-1a、PDF/A-1b?

    在 jasper report 中生成 PDF A 包含许多陷阱 并且某些版本的 jasper report 不支持 这就是为什么我决定通过这个Question Answer 帖子 指示将带有图表的简单报告导出为 PDF A 所需的步骤和库
  • Java ReentrantReadWriteLocks - 如何在读锁中安全地获取写锁?

    我现在在我的代码中使用可重入读写锁 http java sun com javase 6 docs api java util concurrent locks ReentrantReadWriteLock html同步对树状结构的访问 这
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • 根据 netbeans 中的单选按钮切换组件的“启用”属性

    我在按钮组中有两个单选按钮 在同一面板中我有一个文本框和一个按钮 我想仅在选择第二个按钮时启用文本框和按钮 并在选择另一个单选按钮时禁用文本框和按钮 我已经尝试过这个但没有成功 private void radio button2Actio
  • 使用 Vaadin 生成 HTML 速度缓慢

    我是一个有问题的开发人员 目前我们的项目 使用 Vaadin 即将结束 但是 我们在其中一个视图中显示简单数据时遇到了一些麻烦 Vaadin 完成生成后 需要显示超过 500 KB 的数据 以及超过 15K 的 DOM 元素 在完成之前需要
  • 整个程序可以是不可变的吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我熟悉不可变性并且可以设计不可变类 但我主要拥有学术知识 缺乏实践经验 请参考上面的链接图片 尚不允许嵌入 从下往上看 学生需要新地址

随机推荐

  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • 从“AutoCompleteTextView”获取当前建议

    如何获得当前最热门的建议AutoCompleteTextView 我有它建议的项目 并且我注册了一个文本更改侦听器 我在同一屏幕上还有一个列表 当他们打字时 我想将列表滚动到当前的 最佳 建议 但我不知道如何访问当前的建议 或者至少是最重要
  • 在 vim 上将项目设置为更高的突出显示优先级

    我想按照讨论显示非 ASCII 字符here 但是当注释中包含非 ASCII 字符时 语法突出显示会消失 调查了一下这个问题 我在 vim 手册中发现较早启动的项目具有更高的优先级 第三项 从help syn priority 当多个语法项
  • 如何以 clang 格式对齐函数参数名称?

    是否可以使用clang format将结构成员和函数参数名称格式化为列 例如 struct int alpha aligned to b of beta unsigned int beta MyObject gamma aligned wi
  • 重写标准 Spring MVC 异常的处理行为

    Spring Boot 似乎有处理某些异常的默认行为 我有一个休息控制器 如果我不处理HttpRequestMethodNotSupportedException in the ControllerAdvice带注释的休息控制器 应用程序返
  • SELECT DISTINCT 值并 INSERT INTO 表

    我想获取一个包含重复多次的值的列 并仅获取该值一次并将其存储以供以后使用 但同时我想在与该不同列相同的行中获取另一个值 A B C 32263 123456 44 32263 123456 45 32263 123456 46 32264
  • C# 导入 C++ dll

    我有一个托管 dll 文件 它将函数从 C dll 导入到托管环境 我在程序中使用了它的一些函数 但问题是 当我使用它时出现此错误 无法加载 DLL Libraries lib dll 找不到指定的模块 HRESULT 异常 0x80070
  • Javascript Fetch API:标头参数不起作用

    这是我的示例请求 var header new Headers Platform Version 1 App Version 1 Platform FrontEnd var myInit method GET headers header
  • 如何在同一个图上绘制箱形图和特定点?

    我们可以绘制如下箱线图 qplot factor cyl mpg data mtcars geom boxplot 并点为 qplot factor cyl mpg data mtcars geom point 你会如何结合两者 但只是为了
  • 将多行合并为一行多列数据 R

    我有一个数据集 其中以不同方式测量相同的效果 我想比较这些测量结果 我的数据集如下所示 Study MType ID Insect Mean Sd N Alla Fecundity 1 Aphid 62 7628 11 Alla RGR 1
  • java中的字符串池

    Java有字符串池 因此字符串类的对象是不可变的 但我的问题是 创建 String POOL 的必要性是什么 为什么字符串类不像其他类那样保留它自己的值 JVM 内部是否需要一些字符串 或者这是性能优势 如果是的话怎么办 池是可能的 因为字
  • 通过“灾难恢复”在内存和存储受限的系统上加密和/或解密大文件 (AES)

    我有一个相当笼统的问题 所以如果有点模糊 请原谅 因此 我们假设有一个 1GB 的文件 需要在给定系统上加密并随后解密 问题是系统的可用内存少于 512 MB 存储空间大约为 1 5 GB 给定或需要 因此 对于 板载 文件 我们有大约 5
  • 更改 Oracle 11g XE 上的 NLS 字符集参数

    我使用的是 Oracle 11g Express 版 目前 当我使用以下命令检查 NLS 字符集参数时SELECT FROM nls database parameters 它给出了默认值 NLS CHARACTERSET AL32UTF8
  • 如何在 ASP.NET Core 中使用支持依赖注入的自定义模型绑定器?

    我正在尝试在 MVC 中使用自定义模型绑定器 我想从 IoC 容器中解析它 我遇到的问题是 在添加 MVC 服务时无法访问我的容器 因为我的容器尚未构建 并且我需要在构建容器之前添加 MVC 感觉就像是先有鸡还是先有蛋的问题 我确信我缺少一
  • 如何安装 Microsoft.SqlServer.Management.SqlParser?

    当我在新机器上重建它时 我的 c 安装程序项目出现了很多警告 类似的警告是 他们正在寻找 11 0 0 0 版本的 dll 而该 dll 只存在 10 0 0 0 版本 我发现这是由于安装的 SQL Server 版本 SQL Server
  • 如何允许匿名上传到云存储

    我需要我的用户将文件上传到我的 Google Cloud Storage 而无需通过 Google 进行身份验证 这些用户主要是运行我的应用程序的 Windows 台式机 笔记本电脑用户 在阅读了不同的身份验证机制后 我发现可断点续传可能就
  • OSX 10.9.2 上的 Java 1.7 作为 1.5 运行?

    为这件事揪着我的头发 java version and javac version两者都报告相同的 1 7 0 45 但是当我尝试编译最简单的类时 我收到一个类文件错误 gt cat A java public class A gt jav
  • 带有语句主体的 lambda 表达式无法转换为 nopCommerce 中的表达式树 [重复]

    这个问题在这里已经有答案了 我尝试在 nopCommerce 3 0 中创建 linq 联接查询 我在 linq 中加入两个表并写入 代码成功 但视觉工作室智能感知显示错误 例如 带有语句体的 lambda 表达式无法转换为表达式树 请看下
  • 为什么需要“-lpthread”?

    所以我的问题是 为什么在编译命令末尾需要 lpthread 为什么这个命令有效 gcc o name name c lpthread 但这不会 gcc o name name c 我在我的 C 代码中使用 pthread h 库 我已经在网
  • Jersey 客户端上传进度

    我有一个球衣客户端 需要上传一个足够大的文件以需要进度条 问题是 对于需要几分钟的上传 我看到传输的字节数达到 100 申请一开始 然后需要几分钟时间来打印 on finish 字符串 就好像字节被发送到缓冲区 我正在读取传输到缓冲区的速度