Как конвертировать Android.Net.Uri в байтовый массив в C # - PullRequest
0 голосов
/ 10 мая 2018

В моем мобильном приложении с использованием Xamarin.Android я реализовал функцию вложения файлов. В этом я получил содержимое файла в Android.Net.Uri от

protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
  base.OnActivityResult(requestCode, resultCode, data);
  Android.Net.Uri attachmentUri = data.Data;
}

Теперь, чтобы загрузить файл как составное сообщение, мне нужно преобразовать этот URI в байтовый массив. Я много искал, но все на Яве. Мне нужен такой код в C #.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы можете использовать это для вашего составного сообщения:

 var dat = data.Data;
            ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
            FileInputStream filestream;
            try
            {
                filestream = new FileInputStream(new File(dat.Path));
                byte[] buffer = new byte[1024];
                int n = filestream.Read(buffer);
                while (-1 != n)
                {
                    outputstream.Write(buffer, 0, n);
                }
            }
            catch(IOException e)
            {
                e.PrintStackTrace();
             }
            byte[] filebyte = outputstream.ToByteArray();
0 голосов
/ 10 мая 2018

Вы можете использовать ContentResolver.OpenInputStream на Android.Net.Uri, чтобы извлечь поток, который затем можно использовать StreamContent, чтобы преобразовать его в ByteArrayContent объект и применить его к MultipartFormDataContent.

Пример:

using (var resolverStream = ContentResolver.OpenInputStream(data.Data))
using (var streamContent = new StreamContent(resolverStream))
using (var byteArrayContent = new ByteArrayContent(await streamContent.ReadAsByteArrayAsync()))
using (var formDataContent = new MultipartFormDataContent())
{
    formDataContent.Add(byteArrayContent, "file", "DummyFileName");

    // rest of the header setup, PostAsync, etc..

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...