从数据库中读取文件

时间:2008-11-17 21:32:56

标签: asp.net database file-io

我已将txt文件作为字符串存储在数据库列中。现在在我的一个aspx页面上,我有一个链接...我想在用户点击此链接时打开一个txt文件。我如何从数据库中读取文件。我知道如何使用streamreader为存储在磁盘上的文件执行此操作。

由于

4 个答案:

答案 0 :(得分:2)

如果你真的必须将文件存储在数据库中(我完全同意Will,你不应该),你可能想要实现一个单独的下载页面(例如getfile.aspx),它负责为了从数据库中获取基于id的字符串,可能(getfile.aspx?fileId = 12345),设置适当的HTTP标头并将内容直接输出到浏览器。通过设置内容类型标题,您应该能够强制浏览器将aspx页面视为txt文件或任何其他可识别的文件格式。

我强烈建议尝试将项目范围更改为不在DB中存储文件,因为这种方法很快就会变得非常混乱。

答案 1 :(得分:1)

这需要做一些澄清。

如果文件作为字符串存储在数据库中,您只需将其读入字符串并将其显示在页面中。

public void Page_Load(object sender, EventArgs e)
  var text = (from x in dataContext.MyTextTable where x.Id == someId select x.FileText).FirstOrDefault();

  this.textBox.Text = text;
}

好的,这就是你需要做的。伪代码如下:

从数据库加载字符串
对字符串使用ToCharArray()方法以获取字符数组 使用HttpResponse对象将char数组写入()响应流

这是一些几乎可编译的代码:

public void Page_Load(object sender, EventArgs e)
{
  var text = Repository.GetTextFile(this.FileTextBox.Text).ToCharArray();

  Response.Clear();
  Response.AddHeader("Content-Disposition", "attachment; filename=" & this.FileTextBox.Text);
  Response.AddHeader("Content-Length", text.Length.ToString());
  Response.ContentType = "application/octet-stream";
  Response.Write(text, 0, text.length);
  Response.End();
}

我认为mime类型应该是而不是text / plain,因为浏览器可能会尝试打开文件而不是将其另存为附件。

答案 2 :(得分:1)

答案 3 :(得分:0)

为什么要将文件存储在数据库列中?数据库更适合您真正需要查询的内容...它对于“给我过去30天内所有给定链接”或“获得所有带有室内装饰的蓝色汽车”等查询非常有用。

操作系统文件系统可以更好地处理文件。如果你必须有关于该文件的记录,你可以放一条记录,而是把文件的路径放到字符串列中。