如何使用 PCL 支持从 xamarin 跨平台项目中的 URL 下载文件
Posted
技术标签:
【中文标题】如何使用 PCL 支持从 xamarin 跨平台项目中的 URL 下载文件【英文标题】:how to download a file from URL in xamarin cross platform project using PCL Support 【发布时间】:2016-07-22 11:39:20 【问题描述】:我是 Xamarin 的新手。由于只有一小部分 .Net 程序集可用于 PCL,因此面临很多困难。
我需要通过点击保存在本地驱动器中所需的 URL 来下载 .db 文件。由于项目在 PCL 中所以这不允许我在我的项目中使用 System.IO.File,所以使我无法执行 .Net 类库中可用的文件操作。
例如:假设我点击了 URL“http://123.com/register.db”,这将返回 register.db 作为响应。我需要将 register.db 保存在我的本地存储中。
我点击网址的代码如下
public static async Task LaunchURLForSync(string targetUrl)
try
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(targetUrl, HttpCompletionOption.ResponseHeadersRead))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
string fileToWriteTo = Path.GetFileName();
using (Stream streamToWriteTo = File.Open(fileToWriteTo, FileMode.Create)) // This doesn't work with PCL for ex. FIle.Open etc
await streamToReadFrom.CopyToAsync(streamToWriteTo);
catch (Exception ex)
throw ex;
任何帮助将不胜感激。提前谢谢你:)
【问题讨论】:
你的代码没有真正工作:在第 10 行,函数 Path.GetFileName() 接受一个字符串,但你的代码没有参数。 据我研究,没有 pcl 方法可以在本地存储中下载和保存文件。如果你想这样做,你必须在每个平台上实现它 @Radinator 请按照 hVaughan3 的方式做,因为他已经回答了。有用。您需要下载数据并将其保存到数据缓冲区,并使用 PCL 存储将其写入本地存储。 【参考方案1】:PCL 代码只有一部分 API 可供您使用。为了访问所有 API,有时您必须在每个平台上编写本机代码。我建议阅读 Xamarin 的文件存储文章 here。
我还强烈建议使用 PCL Storage 插件,它可以让您轻松地从 Xamarin Forms 项目运行文件相关的方法。 Xamarin 实际上也推荐这个库。
要使用 PCL 存储做您想做的事,在您的所有项目中安装该库后,您需要执行以下操作:
IFile file = await folder.CreateFileAsync("myfile.abc", CreationCollisionOption.ReplaceExisting);
byte[] buffer = new byte[100];
using (System.IO.Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite))
stream.Write(buffer, 0, 100);
【讨论】:
抱歉回复晚了。但我确实从其他论坛找到了解决方案并实施了,它遵循你提到的确切方式。我正在使用 HttpClient 获取数据缓冲区,并使用 PCL 存储将这些文件写入本地存储以上是关于如何使用 PCL 支持从 xamarin 跨平台项目中的 URL 下载文件的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Xamarin.forms pcl 中的 Url 检索 json 字符串
如何从 Xamarin.forms pcl 中的 Url 检索 json 字符串
如何通过 IOT 集线器从 Xamarin PCL 项目将文件上传到 azure Blob 存储
如何在 xamarin ios pcl 中使用 protobuf-net