2017-01-19 10 views
0

У меня есть проект, в котором будут храниться документы в виде сгустков в базе данных MySQL, и загрузить их в виде байтовых массивов с помощью C#:C#: файл поврежден после загрузки в виде массива байт

public static byte[] GetFile(string fileName) 
{ 
     conn.Open(); 
     MySqlCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = ... 
     using (MySqlDataReader reader = cmd.ExecuteReader()) 
     { 
      reader.Read(); 
      if (reader.HasRows) 
      { 
       return Util.ObjectToByteArray(reader["Content"]); 
      } 
      ... 
} 

...

public static byte[] ObjectToByteArray(object obj) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); 
    using (var ms = new MemoryStream()) 
    { 
     bf.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 
} 

загружать файлы, как это:

byte[] newFile = File.ReadAllBytes(fileName); 

и скачать, как это:

но когда я загружаю файлы, они повреждены и не могут быть открыты (например, файлы Excel, некоторые другие типы могут быть открыты). Расширение загруженного файла кажется правильным, но я получаю сообщение о том, что «расширение файла или формат файла недействительны».

+1

Dont 'сохранять файлы в базе данных. http://stackoverflow.com/a/41235395/267540 – e4c5

+0

Получите инструмент diff, а затем работайте в симметричных этапах - сделайте минимальную часть своего проекта, которая включает в себя какое-то преобразование, затем запустите бит, который должен отменить это преобразование, затем сравните вывод с входом. Затем создайте и добавьте сложность (загрузка/загрузка, взаимодействие с БД и т. Д.), –

ответ

1

Я рекомендую использовать функцию GetStream() для чтения данных;

content = reader.GetStream(1); 

и просто возвращает объект потока к файловому автору.