【问题标题】:How to displaly progress bar for downloading attachment如何显示下载附件的进度条
【发布时间】:2012-02-23 14:16:18
【问题描述】:

我显示下载附件的进度条,它工作正常……但是当我下载一些附件时,我收到异常消息:

线程“主”com.sun.mail.util.DecodingException 中的异常: BASE64Decoder:编码流中的错误:需要 4 个有效的 base64 字符,但在 EOF 之前只有 1 个,最近的 10 个字符 分别是:“Q3w5ilxj2P”

我找到了解释:

某些 IMAP 服务器未实现 IMAP 部分 FETCH 功能正常。此问题通常表现为损坏 从 IMAP 下载大邮件时的电子邮件附件 服务器。要解决此服务器错误,请将 “mail.imap.partialfetch”属性为假。你必须设置这个 您提供给 Session 的 Properties 对象中的属性。

http://java.sun.com/products/javamail/NOTES113.txt

所以我关闭了部分提取:

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.partialfetch", "false");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "<username>","<password>");

这解决了问题……但是 Part 类的 getInputStream() 方法会阻塞线程,直到附件完全下载,并且无法获取有关已从邮箱下载的字节数的信息。 如果没有这些信息,就不可能显示进度条。那么有没有办法获取这些信息并显示进度条呢?

【问题讨论】:

    标签: java progress-bar imap jakarta-mail


    【解决方案1】:

    很难。

    我知道的唯一方法是创建您自己的套接字工厂,该工厂生成一种特殊类型的套接字(您自己设计的),该套接字返回一个包装真实套接字 InputStream 的 InputStream 并允许您监控读取的数据量流。这将允许您测量从服务器返回到客户端的 IMAP 协议数据。它无法告诉您返回的数据百分比(因为您正在测量的数据包括所有 IMAP 协议开销和编码开销),但它应该让您看到正在取得的进展。

    如果你创造出这样的东西,我相信其他人会对它非常感兴趣!

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 2021-10-26
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多