使用Aspx从Mysql下载BLOB文件

时间:2012-05-11 07:12:00

标签: c# asp.net mysql download blob

我们将文件作为BLOB存储在mysql中,文件名也是。而且  上传其工作罚款。现在我们想从gridview下载它  这也很完美。但问题是下载后  我们试图打开它时很好,它显示文件格式错误。我们只是  仅处理办公室文件和pdf。

try
{
  int did = Convert.ToInt32(e.CommandArgument);
  DataSet path = download.GetresourcePath(did);
  byte[] fileFromDatabase = null;
  DataRow row = path.Tables[0].Rows[0];
  fileFromDatabase = (byte[])row["UPLFILE"];
  string filename = (string)row["FILENAME"];

  if (fileFromDatabase.Length > 0)
  {
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = string.Format("application/{0}",
      Path.GetExtension(filename).Substring(1));
    Response.AddHeader("content-disposition", 
      string.Format("attachment;filename={0}", filename));
    Response.BinaryWrite(fileFromDatabase);
    Response.Flush();
    Response.End();
  }
}
catch (Exception)
{
  return;
}
  1. 这是我们从网格视图中获取文件的ID。
  2. filename是我们从数据库中获取的文件的名称。
  3. fileFromDatabase是来自Mysql的BLOB文件,我们将其转换为Byte。
  4. 那么任何人都可以建议我做错了吗?

2 个答案:

答案 0 :(得分:1)

尝试删除标题条目并手动添加。

 Response.Clear();
 Response.ClearHeaders();
 Response.AddHeader("Content-Type", "application/octet-stream");
 Response.AddHeader("Content-Length", fileFromDatabase.Length.ToString());
 Response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}", filename));
 Response.BinaryWrite(fileFromDatabase);
 Response.Flush();
 Response.End();

答案 1 :(得分:0)

我建议您不要将文件存储为BLOB。如果没有别的话,这对表现来说非常糟糕。

您应该将文件存储在服务器的文件系统中,并在数据库中存储文件的路径。