【问题标题】:How do I send package-type documents as a mail attachment?如何将包裹类型的文件作为邮件附件发送?
【发布时间】:2012-07-24 19:06:51
【问题描述】:
我有一个包类型的文档 - 即它实际上是一个文件夹,但它使用 NSFileWrapper 并符合 com.apple.package 以显示为一个文件 - 我想通过电子邮件共享它。我已经创建了一个MFMailComposeViewController,我正在尝试找出给addAttachmentData:mimeType:fileName: 的第一个参数提供什么。
该包包含一个图像文件和一个 plist,尽管将来可能会发生变化。
如何将包转换为数据?这是正确的做法吗?
【问题讨论】:
标签:
iphone
mfmailcomposeviewcontroller
nsfilewrapper
【解决方案1】:
正如你所说,一个包实际上是一个文件夹。它仅在 OSX 操作系统上被解释为一个包。
因此,邮件协议不能将其解释为一个包/单个文件,而只能看到一个标准文件夹。
通过电子邮件发送此文件的唯一方法是将文件压缩成一个文件。您可以通过创建包的 ZIP 存档或 tar.gz 文件来做到这一点。
有多种解决方案可以从 Cocoa 中的代码创建 ZIP 存档。您可以直接使用 libz 库和 C 代码,也可以使用一些第三方库(已经有通用代码,并且可以使用 Cocoa 方法帮助您更轻松地完成此任务),例如 ZipArchive 或其他。
【解决方案2】:
我的文件不大,所以 ZIP 有点过分,我也在尽量避免使用第三方代码。所以我想出了一种不同的方法来在一个电子邮件附件中附加多个文件。
首先,我已经有一个 NSFileWrapper 对象,其中包含附件中我想要的所有文件。关键是使用 NSFileWrapper 的 serializedRepresentation 方法来获取 NSData 对象以用于电子邮件附件。我正在为 mimeType 使用“应用程序/八位字节流”。当我重新打开附件时,我使用 NSFileWrapper 的 initWithSerializedRepresentation: 方法来获取原始 NSFileWrapper。
这对我有用,因为附件只会由我的应用程序使用和打开。显然,如果您需要对 App 之外的附件做一些事情,这将不起作用。在这种情况下,ZIP 似乎是合乎逻辑的选择。