2016-07-22 2 views
2

Я новичок в Xamarin. Для PCL доступно множество трудностей из-за того, что для PCL доступна только небольшая сборка .Net.Как загрузить файл с URL-адреса в проекте перекрестной платформы xamarin с использованием поддержки PCL

Мне нужно загрузить .db-файл, нажав URL-адрес, который требуется сохранить на локальном диске. Поскольку проект находится в PCL, это не позволяет мне использовать System.IO.File в моем проекте, поэтому я не могу выполнять файловые операции, доступные в библиотеке классов .Net.

Ex: Предположим, что я ударил 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; 
    } 
} 

Любая помощь будет высоко оценен. Заранее спасибо :)

+0

ваш код на самом деле не рабочий: в строке 10 функция Path .GetFileName() принимает строку, но ваш код не имеет параметров. – Radinator

+0

, как я исследовал, нет никакого способа pcl для загрузки и хранения файла в локальном хранилище. если вы хотите это сделать, вы должны реализовать его на каждой платформе – Radinator

+0

@ 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); 
} 
+0

Извините за поздний ответ. Но я нашел решение с какого-то другого форума и реализовал это, и он следует точно так, как вы упомянули. Я получал буфер данных с помощью HttpClient, а использование хранилища PCL записывало эти файлы в локальное хранилище –

Смежные вопросы