如何使用PCL支持从xamarin跨平台项目中的URL下载文件

问题描述 投票:3回答:1

我是Xamarin的新手。由于只有一小部分.Net组件可以用于PCL,因此面临很多困难。

我需要通过点击保存在本地驱动器中所需的URL来下载.db文件。由于项目是在PCL中所以这不允许我在我的项目中使用System.IO.File,因此使我无法在.Net类库中进行文件操作。

例如:假设我正在访问URL“http://123.com/register.db”,这将返回register.db作为响应。我需要保存register.db,因为它在我的本地存储中。

我点击URL的代码如下

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;
    }
}

任何帮助将受到高度赞赏。先感谢您 :)

c# xamarin httpclient portable-class-library
1个回答
1
投票

PCL代码只有一部分API可供您使用。为了访问所有API,您有时必须在每个平台中编写本机代码。我建议阅读Xamarin的文件存储文章here

我还强烈建议使用PCL Storage插件,它允许您轻松地从Xamarin Forms项目运行与文件相关的方法。 Xamarin实际上也推荐这个库。

要在您的所有项目中安装库之后使用PCL Storage来执行您想要的操作,您将执行以下操作:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.