请查看我的代码,因为我无法在EmailMessageBuilder中附加任何文件。 另外我需要了解ContentType,我应该在ContentType中传递什么?
FileData filedata = await CrossFilePicker.Current.PickFile();
String Path = CrossGetLocalFilePath.Current.GetLocalPath(filedata.FileName);
var emailMessenger = CrossMessaging.Current.EmailMessenger;
if (emailMessenger.CanSendEmail)
{
var email = new EmailMessageBuilder()
.To("to.plugins@xamarin.com")
.Subject("Xamarin Messaging Plugin")
.Body("Well hello there from Xam.Messaging.Plugin")
.WithAttachment(Path, "image/jpeg")
.Build();
emailMessenger.SendEmail(email);
}
我在Xamarin.forms(Portable)中使用上面的代码,我的附件可能是图像,视频或任何文件。
获取错误:
由于IO错误而无法附加文件。
答案 0 :(得分:0)
之前我从未使用过CrossFilePicker插件和CrossGetLocalFilePath插件,但我在这里找到了源代码:
CrossFilePicker:https://github.com/Studyxnet/FilePicker-Plugin-for-Xamarin-and-Windows/tree/master/FilePicker/FilePicker
CrossGetLocalFilePath:https://github.com/bradyjoslin/GetLocalFilePathPlugin/blob/master/GetLocalFilePath/GetLocalFilePath.Plugin.Android/GetLocalFilePathImplementation.cs
这是您调用CrossFilePicker.Current.PickFile()时获得的FileData对象;
namespace Plugin.FilePicker.Abstractions
{
public class FileData
{
public byte[] DataArray { get; set; }
public string FileName { get; set; }
}
}
DataArray是您的文件数据,FileName是您的文件名。它不包含文件路径。
然后调用另一个插件CrossGetLocalFilePath根据文件名获取文件路径。 在CrossGetLocalFilePath源代码中,它只是在Android平台中实现:
public class GetLocalFilePathImplementation : IGetLocalFilePath
{
public string GetLocalPath(string fileName)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
return System.IO.Path.Combine(path, fileName);
}
}
它不会返回您想要的文件路径。它返回了系统特殊文件路径。
因此,在您的情况下,无法通过这些插件获取文件路径。
但我建议你覆盖CrossFilePicker插件。
以UWP为例:
public class FilePickerImplementation : IFilePicker
{
public async Task<FileData> PickFile()
{
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
picker.SuggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
picker.FileTypeFilter.Add("*");
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
var array = await ReadFile(file);
return new FileData
{
DataArray = array,
FileName = file.Name
FilePath = file.Path;
};
}
else
{
return null;
}
}
这是UWP中文件选择器的实现。您可以在FileData对象中添加FilePath属性,如前面的代码所示。
答案 1 :(得分:0)
如果我们使用以下插件进行媒体捕获并从图库中选择图像,我们可以获得路径。
Xam.Plugin.Media
谢谢。