将文件保存到设备是特定于设备的,因此您不能直接在 PCL 中执行此操作。您可以做的是使用依赖注入来调用您的 Android 和 iOS 项目以执行保存并返回标题。因此,从您的代码中,您可以调用:
var filePath = DependencyService.Get<IPlatform>().SaveFile(fileBytes, fileName);
在您的 PCL 中定义:
public interface IPlatform
{
string SaveAndOpenFile(byte[] fileBytes, string fileName);
void DownloadFile(string url);
}
然后在您的 android 项目中,您将执行类似...:
[assembly: Xamarin.Forms.Dependency(typeof(Platform))]
namespace MyApp.Droid.Classes
{
internal class Platform : IPlatform
{
public async void SaveAndOpenFile(byte[] fileBytes, string fileName)
{
var filePath = string.Empty;
try
{
// Write File
var directory = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
directory = Path.Combine(directory, Android.OS.Environment.DirectoryDownloads);
filePath = Path.Combine(directory, fileName);
File.WriteAllBytes(filePath, fileBytes);
return filePath
}
}
}
}
同样在 iOS 中:
[assembly: Xamarin.Forms.Dependency(typeof(Platform))]
namespace MyApp.iOS.Classes
{
internal class Platform : IPlatform
{
public void SaveAndOpenFile(byte[] fileBytes, string fileName)
{
}
}
}