c# - 如何使用 Xamarin-Forms 下载图像并将其保存在本地存储中。?
问题描述
我想下载图像并将其存储在本地存储的特定文件夹中。
我正在使用它来下载图像:
var imageData = await AzureStorage.GetFileAsync(ContainerType.Image, uploadedFilename);
var img = ImageSource.FromStream(() => new MemoryStream(imageData));
解决方案
创建文件服务接口
在您的共享代码中,创建一个新接口,例如,名为 IFileService.cs
public interface IFileService
{
void SavePicture(string name, Stream data, string location="temp");
}
实现安卓
在您的 android 项目中,创建一个名为“Fileservice.cs”的新类。
确保它派生自您之前创建的接口,并用依赖信息装饰它:
[assembly: Dependency(typeof(FileService))]
namespace MyApp.Droid
{
public class FileService : IFileService
{
public void SavePicture(string name, Stream data, string location = "temp")
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
documentsPath = Path.Combine(documentsPath, "Orders", location);
Directory.CreateDirectory(documentsPath);
string filePath = Path.Combine(documentsPath, name);
byte[] bArray = new byte[data.Length];
using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
{
using (data)
{
data.Read(bArray, 0, (int)data.Length);
}
int length = bArray.Length;
fs.Write(bArray, 0, length);
}
}
}
}
实现 iOS iOS 的实现基本相同:
[assembly: Dependency(typeof(FileService))]
namespace MyApp.iOS
{
public class FileService: IFileService
{
public void SavePicture(string name, Stream data, string location = "temp")
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
documentsPath = Path.Combine(documentsPath, "Orders", location);
Directory.CreateDirectory(documentsPath);
string filePath = Path.Combine(documentsPath, name);
byte[] bArray = new byte[data.Length];
using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
{
using (data)
{
data.Read(bArray, 0, (int)data.Length);
}
int length = bArray.Length;
fs.Write(bArray, 0, length);
}
}
}
}
为了保存您的文件,在您的共享代码中,您调用
DependencyService.Get<IFileService>().SavePicture("ImageName.jpg", imageData, "imagesFolder");
应该很好去。
推荐阅读
- javascript - 如何更改此嵌套对象数组中每个 id 的值?
- mysql - 在 MySql 中将字符串与函数的结果连接起来
- angular - 如何在 Angular 11 中观察日期?
- android - 任务“:app:checkDebugAarMetadata”执行失败(Android Studio)
- firebase - Firebase 模拟器套件管理员 SDK 和 FCM
- asp.net - SSRS ReportViewer Design 在第一页和最后一页中断,分页闪烁问题
- ruby-on-rails - 捆绑更新 Rails 解析为 6.0.1 候选版本
- python-3.x - ModuleNotFoundError:Jupyter 笔记本中没有名为“datefinder”的模块——但可以在终端中导入
- c# - C# DirectorySearcher.FindOne(); 获取 thores ArgumentOutOfRangeException
- reactjs - 如何使reducer设置状态?