Xamarin форма - как загрузить и получить изображение с помощью веб-API SQL Server - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно загрузить изображение в виде двоичных данных и получить вот мой код Web Api

   [ResponseType(typeof(tblEmpPicture))]
        public IHttpActionResult PosttblEmpPicture(tblEmpPicture tblEmpPicture)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.tblEmpPictures.Add(tblEmpPicture);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                if (tblEmpPictureExists(tblEmpPicture.intEmpCode))
                {
                    return Conflict();
                }
                else
                {
                    throw;
                }
            }

            return CreatedAtRoute("DefaultApi", new { id = tblEmpPicture.intEmpCode }, tblEmpPicture);
        }

MainPage.xaml

<Image x:Name="userImage" Source="{Binding Pic.vbrPicture, Mode=TwoWay}" Aspect="AspectFill" WidthRequest="85" HeightRequest="85" >

MainPage.cs

await CrossMedia.Current.Initialize();

                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
                {
                    await DisplayAlert("No Camera", ":( No camera available.", "OK");
                    return;
                }

                var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                {
                    Directory = "Sample",
                    Name = "test.jpg"
                });

                if (file == null)
                    return;

                await DisplayAlert("File Location", file.Path, "OK");

                userImage.Source = ImageSource.FromStream(() =>file.GetStream());


                await ((MainViewModel)this.BindingContext).PutUserPicCommand();

MainVewModel

private tblEmpPicture _Pic = new tblEmpPicture();
        public tblEmpPicture Pic
        {
            get { return _Pic; }
            set
            {
                _Pic = value;
                OnPropertChanged();
            }
        }

public async Task PutUserPicCommand()
        {
            try
            {
                IsBusy = true;

                // Call your web service here
                var employeesTaskServices = new TaskServices();
                await employeesTaskServices.PutUserPicAsync(_Pic);
            }
            catch (Exception ex)
            {
                // Handle exception
            }
            finally
            {
                IsBusy = false;

            }
        }

Пожалуйста, мне нужно преобразовать изображение в двоичные данные и сохранить его на сервере SQL. Я могу сохранять другие данные на сервере sql, но не знаю, как преобразовать изображение в двоичный файл и сохранить в базу данных, а также как извлечь и показать изображение.

1 Ответ

0 голосов
/ 26 июня 2018

Рекомендуется не сохранять изображение непосредственно на SQL-сервере, если в этом нет особой необходимости. Подробнее в этой ссылке.

Чтобы ответить на ваш вопрос, выполните следующие действия.

  1. Преобразование изображения в Base64.

    public static async Task<string> Convertbase64Async (Stream stream)
    {
        var bytes = new byte[stream.Length];
        await stream.ReadAsync(bytes, 0, (int)stream.Length);
        string base64 = Convert.ToBase64String(bytes);
        return base64;
    }
    
  2. Теперь изображение будет в строковом формате. Делать вставку.

    INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

  3. Если вы хотите отобразить изображение обратно, извлеките изображение из SQL с помощью запроса SELECT.

  4. Преобразование Base64 обратно в формат изображения.

    public Image LoadImage(String base_64)
    {
        byte[] bytes = Convert.FromBase64String(base_64);
    
        Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = Image.FromStream(ms);
        }
    
        return image;
    }
    

Для справок: Bas64 к изображению , Лучшие практики

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