2017-01-19 59 views
0

我有我的存储格式是在MySQL数据库中的BLOB项目,并使用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); 

和下载这样的:

File.WriteAllBytes(path + "\\" + selectedFileName, 
        DocumentTable.GetFile(selectedFileName)); 

但是,当我下载的文件,他们已损坏,无法打开(例如Excel文件,其他类型可以打开)。下载文件的扩展名似乎是正确的,但我收到“文件扩展名或文件格式无效”的消息。

+1

不要'保存数据库中的文件。 http://stackoverflow.com/a/41235395/267540 – e4c5

+0

获取diff工具,然后以对称阶段工作 - 执行涉及某种转换的项目的最小部分,然后运行应该撤消该转换的位,然后将输出与输入进行比较。然后建立并增加复杂性(上传/下载,与数据库交互等) –

回答

1

我推荐使用数据读取器的GetStream()覆盖;

content = reader.GetStream(1); 

并简单地将流对象返回到您的文件编写器。