Xamarin.android - скопируйте .jpg в общую папку

Я использую файловый сервер Samba для копирования файлов с моего устройства Android в общую папку в Windows. С файлами .txt у меня нет проблем, работает нормально, но я попытался скопировать файл .jpg в общую папку, и это не удалось. Я искал много кодов в Интернете, но кто-то решил мою проблему. Мне удалось скопировать изображение, но при открытии оказывается поврежденным.

У кого-нибудь есть образец кода?

Мой код такой:

Java.IO.File mfile = new Java.IO.File(item.FullName);

var mSharedFolderCalidad = new SmbFile(AppGlobalConfigSoftware.Instance.Parameters.PathToDownloadCalidad + item.Name);

//If exists don't create another time
if (!mSharedFolderCalidad.Exists())
     mSharedFolderCalidad.CreateNewFile();

InputStream inFile = new FileInputStream(mfile);

SmbFileOutputStream sfos = new SmbFileOutputStream(mSharedFolderCalidad);

byte[] buf = new byte[1024];
int len;
while ((len = inFile.Read(buf)) > 0) 
{
  sfos.Write(buf, 0, len);
}

inFile.Close();
sfos.Close();

Любая помощь приветствуется.

Спасибо.


person mrvinent    schedule 29.08.2019    source источник
comment
Пожалуйста, добавьте подпрограммы кода, которые вы используете прямо сейчас, и, пожалуйста, добавьте больше контекста к вопросу.   -  person Hackerman    schedule 29.08.2019
comment
Я добавил свой код сверху. контекст таков: я сделал снимок на свое устройство и хочу загрузить его в общую папку.   -  person mrvinent    schedule 29.08.2019
comment
Привет спасибо! это решено.   -  person mrvinent    schedule 30.08.2019


Ответы (1)


Вы можете использовать Media.Plugin из nuget, чтобы сначала сделать снимок.

var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
{
    PhotoSize = PhotoSize.Medium,
});
public  byte[] ReadFully(Stream input)
{
    byte[] buffer = new byte[16*1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

MediaFile имеет GetStream().

Вы можете использовать это в Stream, а затем преобразовать в byte []. Вот один из способов сделать это:

Определить поток

Stream imageStream;

И запустите его после того, как сделаете фото.

imageStream = file.GetStream();

var imageArr= ReadFully(imageStream );

А потом запишите в свою папку.

person Lucas Zhang    schedule 29.08.2019