Можно ли получить исходный размер файла блоба MySQL, если размер исходного файла не был сохранен? - PullRequest
0 голосов
/ 06 февраля 2020

К сожалению, мне нужно работать в системе, где предыдущие разработчики решили, что сохранение PDF-файлов в виде больших двоичных объектов в базе данных является хорошей идеей. Мне нужно создать PDF-файлы из BLOB-объектов, и они не сохранили исходный размер файла в БД с записью.

Я использую C# для этого. Я могу установить жестко заданный размер, и да, он создает файлы, но все PDF-файлы имеют размер, заданный независимо от содержимого. Любая помощь будет принята с благодарностью. Я попытался использовать MySQL query

SELECT OCTET_LENGTH (file_content) в качестве таблицы total_size FROM, где id = '1', но размер слишком мал.

              UInt32 FileSize = MySqlCon.BlobSize(message.id);
            byte[] rawData;
            FileStream fs;
            string fileName = @"E:\Attachments\" + message.FileName;

            string u = "select file_content from message where id ='" + message.id + "'";
            MySqlCommand cmd = new MySqlCommand(u, MyCon);
            MySqlDataReader myData;
            try
            {
                MyCon.Open();
                myData = cmd.ExecuteReader();

                if (!myData.HasRows)
                    throw new Exception("There are no BLOBs to save");

                myData.Read();
                rawData = new byte[FileSize];

                myData.GetBytes(myData.GetOrdinal("file_content"), 0, rawData, 0, (int)FileSize);

                fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
                fs.Write(rawData, 0, (int)FileSize);
                fs.Close();

                Console.WriteLine("File successfully written to disk!");

                myData.Close();
                MyCon.Close();
                message.FilePath = fileName;
            }
...