我有一个新的要求,在发送附件之前(单独地,而不是分组)压缩附件。我认为目前正在使用的代码是典型代码:
for (final File attachment : this.files()) {
final BodyPart attachmentPart = new MimeBodyPart();
final DataSource source = new FileDataSource(attachment);
attachmentPart.setDataHandler(new DataHandler(source));
attachmentPart.setFileName(attachment.getName());
multipart.addBodyPart(attachmentPart);
}
我想在内存中压缩文件而不是按磁盘。不幸的是,在MimeBodyPart
上,我看到附加文件的唯一方法是使用attachFile()
和setDataHandler()
。 attachFile()
仅适用于已在磁盘上的文件,采用File
或String
文件名参数。
DataHandler
是我的另一种选择。一个构造函数需要DataSource
,但FileDataSource
实现没有压缩选项(并不奇怪)。另一个构造函数允许我传入Object
和MIME类型,但我确实没有内存中的对象,只有ZipOutputStream
。
那我该怎么做?我可以依赖于将临时文件写入磁盘,但我真的不愿意。我应该尝试编写自己的FileCompressionDataSource
实现吗?怎么可能接近这个?
答案 0 :(得分:3)
答案 1 :(得分:0)
在内存中执行此操作的一种方法可能是使用MimeBodyPart
和自定义DataContentHandler
实现,该实现知道如何将对象转换为字节。