将.mov文件附加到MFMailComposeViewController

3

我想通过电子邮件发送.mov文件。因此,我正在使用MFMailComposeViewController。在花费一些时间搜索后,我最终写出了以下代码。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:
                                     [NSString stringWithFormat:@"/Saved Video/%@",[player.contentURL lastPathComponent]]];
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
mail.mailComposeDelegate = self;
[mail addAttachmentData:[NSData dataWithContentsOfURL:[NSURL URLWithString:myPathDocs]] mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];
[mail setSubject:@"Share VIDEO by My App"];
[self presentViewController:mail animated:YES completion:nil]; 

当邮件编辑器出现时,我可以在邮件正文中看到附件,但是我收到的邮件没有附件。我错过了什么吗?还是做错了什么?
请帮助我。

视频的尺寸是多少? - Larme
不是计算出来的,但视频是3秒的480p。因此不超过4-5 MB。 - Mrugesh Tank
1个回答

5

你没有正确获取文件的数据。

第一步是将代码分割,使其更易读和调试。请将以下行进行拆分:

[mail addAttachmentData:[NSData dataWithContentsOfURL:[NSURL URLWithString:myPathDocs]] mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];

转化为以下内容:

NSURL *fileURL = [NSURL URLWithString:myPathDocs];
NSData *fileData = [NSData dataWithContentsOfURL:fileURL];
[mail addAttachmentData:fileData mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];

现在,当您调试此代码时,您会发现fileDatanilfileURL也将为nil(或者至少是无效的URL)。
请更改以下行:
NSURL *fileURL = [NSURL URLWithString:myPathDocs];

to:

NSURL *fileURL = [NSURL fileURLWithPath:myPathDocs];

由于myPathDocs是文件路径而不是URL字符串,您需要这样做。

另外,您应该修复如何构建myPathDocs。而不是:

NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:
                             [NSString stringWithFormat:@"/Saved Video/%@",[player.contentURL lastPathComponent]]];

您应该这样做:
NSString *myPathDocs = [[documentsDirectory stringByAppendingPathComponent:@"Saved Video"] stringByAppendingPathComponent:[player.contentURL lastPathComponent]];

谢谢,伙计。我不知道为什么我用字符串创建URL而不是fileURL。可能是我匆忙中犯了错误! - Mrugesh Tank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接