Reyhan M.T Ответов: 1

Могу ли я разделить значение base64string из изображения в мобильном устройстве и отправить base64string в данные


Я хочу разделить значение base64string из изображения в мобильном телефоне и отправить base64string в мою базу данных, потому что текст поля базы данных сохраняет только 65 000 строк. Поэтому я хочу сохранить значение base64string в двух полях в моей базе данных.Почему я хочу сохранить в двух полях в моей базе данных, потому что значение base64string из изображения в хранилище телефона больше 65 000 строк.Не могли бы вы помочь мне, как решить эту проблему, спасибо

Что я уже пробовал:

Это моя кодировка уже сохранить только 65rb значение base64, как разделить сохранить значение base64 в 2 поля базы данных
async void SavePicture(object sender,EventArgs e)
     {
        file = await CrossMedia.Current.PickPhotoAsync(new PickMediaOptions
        {
            PhotoSize = PhotoSize.Medium,
            CompressionQuality = 100,
        });

        //Convert image to string
        FileStream fs = new FileStream(file.Path, FileMode.Open, FileAccess.Read);
        byte[] ImageData = new byte[fs.Length];
        fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));
        fs.Close();
        string imgResized = Convert.ToBase64String(ImageData);

        //Convert string to image
        Byte[] ImageFotoBase64 = System.Convert.FromBase64String(imgResized);
        ImageTest = ImageSource.FromStream(() => new MemoryStream(ImageFotoBase64));

        imgResize.Source = ImageTest;

        api = RestService.For<ApiInterface>("http://192.168.0.195/webservice/webservice.asmx");
            
        String iduser = "";

        var stringimage = imgResized;

        User user = new User(iduser);
        user.Profile_Image = stringimage;

        var response = await api.AddNewGoogle(new model.GoogleQuery(google));

        if (response.isSuccess)
        {
           Loading.toast("Sukses Menyimpan Foto");
        }
        else
        {
          LoadingFailed.toast("Gagal Menyimpan Foto");
        }

      }

1 Ответов

Рейтинг:
2

OriginalGriff

Вы можете это сделать - это даже не сложно, - но вы можете обнаружить, что вам нужно больше одного поля: два поля будут содержать только 2* 64K = 128K, и это очень легко для современного изображения, чтобы превысить это.
Вместо того чтобы читать весь образ целиком:

fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));
Просто прочитайте максимальный размер вашего блока БД преобразованного в базу 64:
l = 4*(n/3)  (rounded up a four byte boundary)

n-это размер входного блока, а l = 64K, так что:
n = 3 * 65536 / 4 == 49152

Итак, чтобы прочитать блок:
fs.Read(ImageData, 0, 49152);
Преобразуйте его в Base64 и сохраните, а затем прочтите второй раздел:
fs.Read(ImageData, 49152, 49152);
И повторяйте, пока не закончатся данные.

Но гораздо лучшим решением будет сохранить его в двоичном поле, которое принимает весь файл - каждая БД, которую я знаю, позволяет это сделать, - и преобразовать его в base64, если он вам понадобится позже для презентации.