c# - 使用 Aspx 从 Mysql 下载 BLOB 文件

标签 c# asp.net mysql download blob

我们将文件作为 BLOB 存储在 mysql 中,文件名也一样。虽然 上传它的工作正常。现在我们要从 gridview 下载它 这也很完美。但是问题是下载完之后 很好,当我们尝试打开它时,它显示文件格式错误。我们只是 仅处理 office 文档和 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 是我们从 GridView 中获取的文件的 ID。
  2. filename 是我们从数据库中获取的文件的名称。
  3. fileFromDatabase 是来自 Mysql 的 BLOB 文件,我们将其转换为 Byte。

那么有人可以告诉我我做错了什么吗?

最佳答案

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

 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();

关于c# - 使用 Aspx 从 Mysql 下载 BLOB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10547024/

相关文章:

asp.net - ASP.NET Ajax 库死了吗?

c# - ASP.NET 图表控件的默认 3D 图表透明度?

mysql - 带有 mysql 池的 Node.js http 在出错时意外退出

mysql - WordNet 3.0 咒语

c# - 从 contentpresenter 中的内容获取附加属性值

c# - 为什么使用空 lambda 函数注册到事件会导致内存中的强引用?

c# - Fluent NHibernate - 从映射中删除架构以使用 SQLite 进行测试

JavaScript 计时器和页面导航

php - 使用选择选项 Laravel 5.2 在插入新记录时将数据添加到数据透视表

c# - 一个按钮的 OnClientClick 和 Click 事件没有触发 - FireFox 中的问题