如何使用 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 下载文件的主要内容,如果未能解决你的问题,请参考以下文章