Member 12597547 Ответов: 1

Как преобразовать данные byte[] или blob в понятный файл. csv,. xlsx или. pdf в зависимости от типа содержимого.


Требование похоже на извлечение данных из базы данных oracle, которая будет находиться в BLOB-типе данных. Мне нужно загрузить данные blob-объекта на основе типа контента, например, если это файл .csv,. xlsx или .pdf в удобочитаемом виде.


Пожалуйста, помогите мне выбраться отсюда.

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

//в то время как (читатель.Читать())
//{
// //байт[] стрим = (байт[])читатель["сведения"];
// string fileName = (string)reader ["имя файла"];
// string contentType = (string)reader ["FILE_TYPE"];
// //Функция WriteFile(трансляция, именем, значение contentType, свойство HttpContext.Тока.Ответ);


// FileStream fs; / / записывает BLOB-объект в файл (*. bmp).
// BinaryWriter bw; / / передает BLOB-объект в объект FileStream.
// int bufferSize = 100; / / размер буфера BLOB-объектов.
// байт[] outbyte = новый байт[параметр bufferSize]; // двоичный байт[] буфера, которые должны быть заполнены метод getbytes.
// long retval; / / байты, возвращенные из GetBytes.
// long startIndex = 0; / / начальная позиция в выводе BLOB-объекта.



// / / Создайте файл для хранения выходных данных.
// fs = новый файловый поток (@"C:\Users\V.Manjunatha\Desktop\Packages\" + имя файла,
// Содержит filemode.OpenOrCreate, FileAccess.Писать);
// bw = новый BinaryWriter(fs);

// / / Сбросьте начальный байт для нового BLOB-объекта.
// startIndex = 0;

// / / Считайте байты в outbyte[] и сохраняйте количество возвращенных байтов.
// retval = читатель.GetBytes(1, startIndex, outbyte, 0, bufferSize);

// / / Продолжайте чтение и запись, пока есть байты за пределами размера буфера.
// while (retval == bufferSize)
// {
// bw. Write(outbyte);
// bw.Промывать();

// / / Переместите начальный индекс в конец последнего буфера и заполните его.
// startIndex += bufferSize;
// retval = читатель.GetBytes(1, startIndex, outbyte, 0, bufferSize);
// }

// / / Запишите оставшийся буфер.
// bw. Write(outbyte, 0, (int)retval);
// bw.Промывать();

// / / Закройте выходной файл.
// bw.Close();
// Ф.Рядом();

//}

Когда я использую этот код, файл. csv как


""½K®1ŽžÛ7à™l$" ~O OàÎà€ " cüææ?
"I_ÿãýÿÿÿþûþçßâßÒßòßý¿åïÿü§üý×êúgýïÿ-ç8þ - /ü“cš9·ôðŸHÿ þ”OHKr¤ÿF7äþ©2)Pgû"

6ÎËÜ'Q §ú—ÇÀÀ
Œ6ïjñ£@&iXPž3Bò Š Š9xrïåïÿ(KC'ïò'âÈ6€R[×βxy4[Μ Æ Æ
¤Я(¶†ëÇÒÈÓ:я{rþ¼"eŒ¿ÄOXÄòŽú?@ý/•õÎ#б'Èëéçùòùºžðˆ ќ¥çú"Å.1×õ CüÊqÿÒT
='nkò('4õ@gzZïc}'@*'rús *uuí†ÐË°) * ú
#Ф(¿¥±f½'jýÈ#k0òšé€44™русская£Fç“ܾ®/Îd(Ž:Òßhýûx(Ž¦-/–êHåþm:€ŒÃÑ“sýÊ#yÐãóz. ‘tý6G*
M5 ""€â1s÷V' ®q qÍ}2L×Ð!éz [[o©*Š Š
LžÍ—†Ó¾þÔ'×+Дж±л@¦3ºþÿfyéã [*#pÆÐl 23ŽéP`¦µþ&ЛТ;ó0¥¢@¡'ã¼€&ГТ;dQÀÜ~Щ¶xñ-"继õfÊŸPeÎØ›
4ч×*·¥|-9r¾ÿZgá#ïzû\л@в„KOÎ
4R ¿/βïpï? Á©8@ - ¶\AòäAX "éú ÍÍB"< 'â€g'I â âμú;@å°{ržÈM-Ö Ž Ž™UX_ ¡- /A A[Äáx"‰‰¾] Ÿ‰ / æMÆáŠ
Të Këë¦ * äìP¡Î%µ|Bçμ¤:ɽ-Øò¡KIw. 0®ô ô {â'$??: rýùý” ÷ + é'åìó ¡uùž¥›
"°t l©Nä4"
Ùs]о·ï1Xó
„•„~¢д–Ò&ЛТ;}ýÀ-•У4„дБ...¤х€|ÈÁø3]ŸÀIŸ@:R]IÖ4¦+я сыÎÓÀp¤úh»3ec¿#-®wäCÇÀ2&ЛТ;м@&амп;ähyµá3õvýöfcç`·å2ƒ$gª3í¥êg„ž3]þtöè\awƒ&ГТ;}ако—1&ЛТ;€м
)Ùàššåæq!m€UÀ†Õ”‹
"x@Ó™3±"çžt€üøEÐß·nåå=à1€Ø%ˆ
"-'âú ψ‡ À"
Yy2v
"9V[Ž}á'ÕÝ`
}àtv5öü°—9v ð ÐAs”
"'†"1zržà× - æoæùùzø'BÀú&0u'kó 1ÏÔ£!gÈìß@=€:RfË°‰Æ"eVÚÛ–1'ó5CŽU4'Ï%Çïýõ; Çbb2ë?®. î î F1äxÏð L L82ôøékk1yèc}ÉÏíe(2wÆÕx™¡½Œ 4 ¼A:\4¥2ÌÐ"
9irx:
;- À À
Œî_Êßœù{-!3"ãð¤2¡ñ4{Б» }–:'½‰!Да"
3ÝYRÙ
>ŸJÕ X Xzμý2æ^ž@€ € ÌfkÃ& cVl


который не читается.

BillWoodruff

Я смущен вашим вопросом. Если вы знаете, что такое формат данных (.pdf и т. д.), Не следует ли вам создать большой двоичный объект, сериализовав файл в двоичную форму, а затем сохранить его с помощью какого-нибудь связанного идентифицирующего тега, чтобы вы знали, что такое большой двоичный объект ?

Затем, когда вам нужно заново сконструировать файл, вы получаете тип blob-объекта, а затем получаете данные blob-объекта и передаете их соответствующему де-сериализатору.

Member 12597547

Да, у меня есть тип blob-объекта, как де-сериализовать его до соответствующего типа. Не могли бы вы предложить мне выйти

BillWoodruff

Существует множество инструментов для получения содержимого .csv или. xslx в некотором представлении, а также множество инструментов для создания файлов. pdf и просмотра их в .NET. Пора тебе заняться кое-какими исследованиями.

Вы можете, например, взаимодействовать с Excel с помощью автоматизации.

1 Ответов

Рейтинг:
1

xszaboj

Как я это делаю:
Сначала вы получаете байты из базы данных:

private byte[] GetFile(string id)
{
	using (SqlConnection con = new SqlConnection("CONNECTION STRING")
	{
		using (SqlCommand cmd = con.CreateCommand())
		{
			cmd.CommandText = "Select COLUMN from TABLE where id = @id";
			cmd.Parameters.AddWithValue("@id", id);
			con.Open();
			return (byte[])cmd.ExecuteScalar();
		}
	}
}


Затем сохраните файл:

var byteFile = GetFile(name,tableName, urn);
if (table.Extension == "pdf")
{
	File.WriteAllBytes("PATH/NAME", byteFile);
}
else
{
	string text = Encoding.Unicode.GetString(byteFile);
	File.WriteAllText("PATH/NAME", text);
}


Иногда вам нужно писать байты (например, pdf), иногда лучше писать текст. Для текста не забудьте указать правильную кодировку.


Member 12597547

Когда я использую вышеприведенный код, я получаю следующий вывод, который неверен

2ç¢ï'Ÿî™†ì3ä""ç韵í""ë¥æ—¦é...â'°éžžäŽµê¿'ì½±î©'ֽ㽱郟㏙àªâ¡2áŒ2æƒ"å®åé‰...á--îŽáµã‰Ÿâ"•ç‰ˆï""å¢2ꢩê®"╜䍎쩦ۜæ"麇æ ï ï" £ëš "î'áá2'ãã" â ... ¾ë2—â ä äì Ÿè3ä""숵釰ï2°ãº°á†å¤ã'Žìâ'2⁼⼜荿쵗éœ'êŒï¿£êœ¼ä®ã3ˆé€žå'1燇Å"ퟺæ‰ë1–â£å¢2홢è'1劏㵼襟ä"1ꐖ- ë...¥ê"¢ï¿½ê—æ"§âˆ½ã--냗â'žèœºéºí€žë"â"罍ã䢁â©"î¾æ"–æ¾·î‰ì®3èµ"ì±–áƒ3ëž—é¦á½¶å¦î¢¼í""ã"§è¶ï¿½åš•è¤"á'1ë"‰Û€ é á á '¡ç "¾è"èï...2è2—嚺æ... * m±' æ‡1à ¼ á... * ƒì ¡¡å " 2â Ž Žë...é'àëï ¡¡¡©½- ££€3

Можете ли вы предложить мне, например, как десерилизировать байт[]

xszaboj

Привет, да, я могу вам помочь, просто мне нужно больше информации. Какой файл вы пытаетесь десериализовать? Вы пробовали другую кодировку? Можете ли вы показать нам, как вы сериализуете файл в байт[]?

Member 12597547

я попробовал с этими строками, которые вы предоставили для кодирования с правильным путем
строковый текст = кодировка.Юникод.Метода getString(datainBytes);
Файл.WriteAllText(@"C:\Users\V.Manjunatha\Desktop\Packages\" + имя файла, текст);

А тип контента -. csv для кодирования с приведенными выше строками, он показывает результат в нечитаемом формате, как это было предусмотрено ранее.

У меня нет никакого файла для десериализации. Это просто Blob-данные (поле данных), которые поступают из oracle DB.

xszaboj

Может быть, попробовать путь writeallbytes. Можете ли вы также быть уверены, что это cvs? Или другую кодировку, то Юникод