Я разрабатываю приложение для iOS и Android с использованием Xamarin и MVVM. Приложение должно загружать \ загружать файлы на сервер \ с сервера. В деталях, есть кнопка на Android, нажмите на нее, откроется сборщик файлов Android, и я получаю файл. То же самое в iOS. Проблема в том, что я пытаюсь отправить файл в viewmodel как Stream, но в Android он равен Android.Runtime.InputStreamInvoker
, а в iOS - NSData
. Есть ли универсальный способ для отправки потока файла в viewmodel или что-то отличное? И кастинг для Stream не работает, когда я отправляю его не viewmodel, я не могу получить информацию из потока. Может быть, у кого-то была такая проблема.Xamarin MVVM, работающий с файлами
В качестве примера, на Android приема файла:
public override void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
base.OnActivityResult(requestCode, resultCode, intent);
if (resultCode == (int)Result.Ok)
{
var returnUri = intent.Data;
var mimeType = _baseActivity.ContentResolver.GetType(returnUri);
var returnCursor =
_baseActivity.ContentResolver.Query(returnUri, null, null, null, null);
int nameIndex = returnCursor.GetColumnIndex(OpenableColumns.DisplayName);
int sizeIndex = returnCursor.GetColumnIndex(OpenableColumns.Size);
returnCursor.MoveToFirst();
var name = returnCursor.GetString(nameIndex);
var size = returnCursor.GetLong(sizeIndex);
var inputStream = (Android.Runtime.InputStreamInvoker) _baseActivity.ContentResolver.OpenInputStream(returnUri);
var count = inputStream.BaseInputStream.Available();
//then I want to send inputStrea here what to do next??
}
}
Я знаю, что я могу читать весь файл и скопировать его в, например MemoryStream
и отправить, но это очень медленно и не хорошо, я ищу для метода без копирования.