下载并保存PDF以供查看

时间:2016-02-02 15:47:38

标签: xamarin xamarin.ios

我试图从我的应用程序下载PDF文档并将其显示在IBooks中,或至少让它可以阅读完成下载的时间。

我按照Xamarin的下载示例,它允许我下载PDF并在本地保存。它也以错误的编码保存。

这是我到目前为止所尝试过的。

private void PdfClickHandler()
{
    var webClient = new WebClient();

    webClient.DownloadStringCompleted += (s, e) => {
        var text = e.Result; // get the downloaded text
        string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        string localFilename = $"{_blueways}.pdf";
        // writes to local storage
        File.WriteAllText(Path.Combine(documentsPath, localFilename), text); 

        InvokeOnMainThread(() => {
            new UIAlertView("Done", "File downloaded and saved", null, "OK", null).Show();
        });
    };

    var url = new Uri(_blueway.PDF);
    webClient.Encoding = Encoding.UTF8;
    webClient.DownloadStringAsync(url);
}

3 个答案:

答案 0 :(得分:2)

不要将DownloadStringAsync用于"二进制"数据,请使用DownloadDataAsync

  

从指定为异步操作的URI下载资源作为Byte数组。

private void PdfClickHandler ()
{
    var webClient = new WebClient ();

    webClient.DownloadDataCompleted += (s, e) => {
        var data = e.Result;
        string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        string localFilename = $"{_blueways}.pdf";
        File.WriteAllBytes (Path.Combine (documentsPath, localFilename), data);
        InvokeOnMainThread (() => {
            new UIAlertView ("Done", "File downloaded and saved", null, "OK", null).Show ();
        });
    };
    var url = new Uri ("_blueway.PDF");
    webClient.DownloadDataAsync (url);
}

答案 1 :(得分:0)

//检索URL
var pdfUrl = new Uri(“ url.pdf”); //在此处输入PDF路径

///使用设备浏览器打开PDF URL以下载
Device.OpenUri(pdfUrl);

答案 2 :(得分:-1)

以下是从远程服务器下载PCL Xamarin中的文件的示例代码。 我使用了Nuget中提供的PCLStorage库包。您只需要在项目中下载并安装即可。

 public  async void Downloadfile(string Url)
    {
        try
        {
            Uri url = new Uri(Url);
            var client = new HttpClient();


            IFolder rootfolder = FileSystem.Current.LocalStorage;
            IFolder appfolder = await rootfolder.CreateFolderAsync("Download", CreationCollisionOption.OpenIfExists);
            IFolder dbfolder = await appfolder.CreateFolderAsync("foldername", CreationCollisionOption.OpenIfExists);
            IFile file = await dbfolder.CreateFileAsync(strReport_name, CreationCollisionOption.ReplaceExisting);
            using (var fileHandler = await file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite))
            {
                var httpResponse = await client.GetAsync(url);
                byte[] dataBuffer = await httpResponse.Content.ReadAsByteArrayAsync();
                await fileHandler.WriteAsync(dataBuffer, 0, dataBuffer.Length);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }