1

我们将文件作为 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. 这里 did 是我们从网格视图中获取的文件的 ID。
  2. filename 是我们从数据库中获取的文件的名称。
  3. fileFromDatabase 是来自 Mysql 的 BLOB 文件,我们将其转换为 Byte。

那么有人可以建议我我做错了什么吗?

4

2 回答 2

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();
于 2012-05-11T07:23:51.767 回答
0

我建议您不要将文件存储为 BLOB。如果没有别的,这对性能非常不利。

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

于 2012-05-11T07:15:16.867 回答