Я получил файл резервной копии MySql, содержащий столбец типа:
CREATE TABLE 'person' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'profilepicture' blob,
)
Содержимое этой строки profilepicture закодировано в файле резервной копии на какой-то дамп, начиная (в текстовом редакторе), например:
INSERT INTO 'tbox_account_transaction' VALUES (8,'?\?\?0JFIF\0\0\0\0\0\0[...]');
Как я могу декодировать это из файла резервной копии.sql в С#? Это не Base64, но я не понимаю, что еще может быть. Я не хочу восстанавливать файл backup.sql на MySql, а вместо этого расшифровывать blob из файла резервной копии.
Байты, которые вы видите, почти наверняка являются начальными байтами изображения JPEG. Читаемая строка "JFIF", начиная с пятого байта, является ключом (см. Https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format).
Многие из других двоичных байтов являются нулевыми или непечатаемыми символами. Все странно \?
или \0
- это лучшие усилия клиента при представлении этих байтов на вашем текстовом дисплее.
Самый простой способ получить доступ к этим данным - это восстановить файл дампа в экземпляр MySQL (даже локальный, работающий на ноутбуке), а затем использовать SQL в вашем коде С# для доступа к двоичному содержимому profilepicture
.
Или сохраните данные из одного блоба в файл .jpg
как предлагает @Tommaso Belluzzo, или просто покажите его напрямую, если сможете. Я не программист на С#, но для этого есть класс Bitmap
(см. Https://msdn.microsoft.com/en-us/library/8tda2c3c(v=vs.85).aspx).
Он выходит за рамки ответа на переполнение стека, чтобы дать учебник о том, как писать SQL в приложении С#. Для этого доступно множество ресурсов.
'
закодировано как \'
... Я знаю, как создать файл из потока и как создать класс растрового изображения, но мне нужно сначала декодировать информацию.
Это похоже на заголовок файла jpg
. Попробуйте следующее (blob
является String
напечатал переменная, содержащая profilepicture
):
using (MemoryStream stream = new MemoryStream(buffer))
{
Image image = Image.FromStream(stream, true, true);
image.Save("C:\\Test.jpg", ImageFormat.Jpeg);
}
buffer
.
something.jpg
.jpg, он откроется?SELECT profilepicture FROM person
онаSELECT profilepicture FROM person
что-то подобное). Если он не закодирован, вы можете просто преобразовать значение непосредственно в файл - см. Здесь: stackoverflow.com/questions/8592455/…