Java将文件从虚拟文件系统附加到电子邮件



我正在使用虚拟文件系统,我想将文件附加到电子邮件。但是,MimeBodyPart对象仅获取文件,该文件在JIMFS之类的默认文件系统上不起作用。请参阅下面的代码,当我尝试转换为文件时,我会在其中得到无支柱的异常。

public Email attach(Path file){
    MimeBodyPart attachment = new MimeBodyPart()
    attachment.attachFile(file.toFile())
    attachments.add(attachment)
    return this
}

,因为jimfs文件不是真的文件,您无法使用文件API。

一个简单的解决方法是使用bytearraydatasource,它将复制数据。

更好的方法是编写自己的PathDatasource,类似于FileDatasource,但使用files.newinputstream而不是fileInputStream。然后使用:

连接文件
MimeBodyPart mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(new PathDataSource(path)));
mbp.setFileName(path.getFileName().toString());
mbp.setDisposition(Part.ATTACHMENT);

无论此 MimeBodyPart api真正什么都应该可以使用 Path,以便您可以直接使用jimfs文件,但是由于 java.nio.file apis需要Java 7,并且不在Android上工作,但不幸的是,许多库都不支持Path

toFile()永远无法适用于jimfs文件,也不能用于默认文件系统上不使用的任何文件,因为File类只能在默认文件系统上表示文件。是的,您需要将jimfs文件复制到真实文件系统以使用此attachFile方法。

如果MimeBodyPart API可以选择使用URLURI进行附件,则您可能可以使用该加上file.toUri()[.toURL()]。或者,如果可以使用InputStream,您显然可以从文件中获取其中一个并改用它。

相关内容

  • 没有找到相关文章

最新更新